Go中的网络编程

Pol*_*ang 4 go

我正在学习Go for network programming.问题是Go文档太简单了.例如,我不知道何时使用net.DialTCP,何时使用TCPListener对象AcceptTCP,有什么区别?客户端如何与其他客户端通信?不是客户端到服务器.

fuz*_*fuz 13

在Go中,您使用Dial函数net来连接到远程计算机.

net.Dial("tcp","google.com:80")
net.Dial("udp","tracker.thepiratebay.org:6969")
net.Dial("ip","kremvax.su")
net.Dial("unix","/dev/log")
Run Code Online (Sandbox Code Playgroud)

这将为您提供一个抽象Conn对象,表示您刚刚建立的连接.Conn实现ReadWriteCloser接口io和其他几个功能.您可以使用此对象发送和接收数据.

听力

要收听,即打开一个端口,您可以使用Listennet中的功能.调用Listen会给你一个Listener对象.使用Accept接受传入的连接.Accept返回Conn可以像上面一样使用的另一个对象.

ls, err := net.Listen("tcp",":1337")
if err != nil {
    // port probably blocked, insert error handling here
}

conn, err := ls.Accept()
if err != nil {
    // error handling
}

conn.Write("Hello, world!")
Run Code Online (Sandbox Code Playgroud)

DialTCP和ListenTCP

这些功能使您可以更好地控制TCP连接.我建议你只使用它们,如果你的程序确实需要它们,Dial并且Listen更简单,更通用,并且很容易让你使你的程序适应其他类型的网络连接.