我正在学习Go语言的网络编程。问题在于Go的文档过于简单。例如,我不知道何时使用net.DialTCP
,何时使用TCPListener
对象的AcceptTCP
方法,它们之间有何区别?客户端如何与另一个客户端通信?而不是客户端与服务器。
我正在学习Go语言的网络编程。问题在于Go的文档过于简单。例如,我不知道何时使用net.DialTCP
,何时使用TCPListener
对象的AcceptTCP
方法,它们之间有何区别?客户端如何与另一个客户端通信?而不是客户端与服务器。
在Go语言中,你可以使用net
包中的Dial
函数来连接远程计算机。
net.Dial("tcp","google.com:80")
net.Dial("udp","tracker.thepiratebay.org:6969")
net.Dial("ip","kremvax.su")
net.Dial("unix","/dev/log")
这会给你一个抽象的Conn
对象,该对象表示刚刚建立的连接。 Conn
实现了来自io
的ReadWriteCloser
接口和其他几个函数。您可以使用此对象发送和接收数据。
要进行监听,即打开端口,您可以使用net中的Listen
函数。调用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!")
这些函数给您更多对TCP连接的控制权。我建议仅在程序绝对需要时使用它们,因为Dial
和Listen
更简单、更通用,并且可以轻松地让您将程序适应其他类型的网络连接。
net.DialTCP
用于客户端创建与远程服务器的连接。
net.TCPListener.AcceptTCP
用于服务器端接受新连接(可能由客户端使用net.DialTCP
初始化)。请注意,侦听器可以逐个接受多个连接,从而同时为多个客户端提供服务(例如,每个在不同的goroutine中)。
根据您正在编写的是客户端还是服务器端应该分别使用net.DialTCP
或net.TCPListener
。
也许您应该先了解一般的网络编程知识?然后我认为这些将更有意义。