博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[日常] Go语言圣经--Channel习题
阅读量:5930 次
发布时间:2019-06-19

本文共 1524 字,大约阅读时间需要 5 分钟。

练习 8.3: 在netcat3例子中,conn虽然是一个interface类型的值,但是其底层真实类型是*net.TCPConn,代表一个TCP连接。一个TCP连接有读和写两个部分,可以使用CloseRead和CloseWrite方法分别关闭它们。修改netcat3的主goroutine代码,只关闭网络连接中写的部分,这样的话后台goroutine可以在标准输入被关闭后继续打印从reverb1服务器传回的数据。(要在reverb2服务器也完成同样的功能是比较困难的;参考练习 8.4。)

1.
net.Dial()
func Dial(network, address string) (Conn, error)
2.net.TCPConn
type TCPConn struct {
// contains filtered or unexported fields
}
TCPConn is an implementation of the Conn interface for TCP network connections.

 

package mainimport (        "io"        "log"        "net"        "os")func main() {        conn, err := net.Dial("tcp", "localhost:8040")        if err != nil {                log.Fatal(err)        }           //内置make函数创建一个channel,可以发送struct类型的数据        done := make(chan struct{})        //go语句调用一个函数字面量,启动goroutine的常用形式        go func() {                //从网络连接到标准输出,如果连接没断也会阻塞                //如果TCP的读连接关闭会报错:use of closed network connection                _, err := io.Copy(os.Stdout, conn)                log.Println(err)                log.Println("done")                //发送channel给接收goroutine                done <- struct{}{}        }()         //从标准输入到网络连接中,这个地方会阻塞,按Control+D关闭标准输入        mustCopy(conn, os.Stdin)        //      conn.Close()        //类型断言,调用*net.TCPConn的方法CloseWrite()只关闭TCP的写连接        cw := conn.(*net.TCPConn)        cw.CloseWrite()        <-done // 阻塞等待后台 goroutine 完成接收channel}func mustCopy(dst io.Writer, src io.Reader) {        if _, err := io.Copy(dst, src); err != nil {                log.Fatal(err)        }   }

  

转载地址:http://slktx.baihongyu.com/

你可能感兴趣的文章
unity游戏与我
查看>>
iis6 zencart1.39 伪静态规则
查看>>
SQL Server代理(3/12):代理警报和操作员
查看>>
基于事件驱动的DDD领域驱动设计框架分享(附源代码)
查看>>
Linux备份ifcfg-eth0文件导致的网络故障问题
查看>>
2018年尾总结——稳中成长
查看>>
行列式的乘法定理
查看>>
JFreeChart开发_用JFreeChart增强JSP报表的用户体验
查看>>
度量时间差
查看>>
MySQL 5.6为什么关闭元数据统计信息自动更新&统计信息收集源代码探索
查看>>
apache prefork模式优化错误
查看>>
jmeter高级用法例子,如何扩展自定义函数
查看>>
通过jsp请求Servlet来操作HBASE
查看>>
JS页面刷新保持数据不丢失
查看>>
清橙A1202&Bzoj2201:彩色圆环
查看>>
使用data pump工具的准备
查看>>
springMVC---级联属性
查看>>
get和post区别
查看>>
crontab执行shell脚本日志中出现乱码
查看>>
Floodlight 在 ChannelPipeline 图
查看>>