
要监听端口并接受传入连接,可以使用net.listen函数。该函数接受网络协议类型和地址作为参数,返回一个listener对象。调用listener对象的accept方法可以接受传入的连接,该方法返回一个conn对象,可以用于与客户端进行通信。
package main
import (
"fmt"
"net"
)
func main() {
ls, err := net.Listen("tcp", ":1337")
if err != nil {
fmt.Println("Error listening:", err)
return
}
defer ls.Close()
fmt.Println("Listening on port 1337")
for {
conn, err := ls.Accept()
if err != nil {
fmt.Println("Error accepting:", err)
continue
}
defer conn.Close()
fmt.Println("Accepted connection from:", conn.RemoteAddr())
_, err = conn.Write([]byte("Hello, world!\n"))
if err != nil {
fmt.Println("Error writing:", err)
continue
}
}
}DialTCP和ListenTCP函数提供了对TCP连接更细粒度的控制。它们允许你指定本地地址、远程地址等参数。通常情况下,建议使用更简单的Dial和Listen函数,除非你的程序确实需要更精细的控制。
例如,你可以使用DialTCP来指定本地地址:
package main
import (
"fmt"
"net"
)
func main() {
localAddr, err := net.ResolveTCPAddr("tcp", "127.0.0.1:0") // 0 表示随机端口
if err != nil {
fmt.Println("Error resolving local address:", err)
return
}
remoteAddr, err := net.ResolveTCPAddr("tcp", "google.com:80")
if err != nil {
fmt.Println("Error resolving remote address:", err)
return
}
conn, err := net.DialTCP("tcp", localAddr, remoteAddr)
if err != nil {
fmt.Println("Error dialing TCP:", err)
return
}
defer conn.Close()
fmt.Println("Connected to Google via TCP using local address:", conn.LocalAddr())
}类似地,ListenTCP允许你指定监听的本地地址:
package main
import (
"fmt"
"net"
"net/netip"
)
func main() {
addr := netip.AddrPortFrom(netip.IPv4(127, 0, 0, 1), 1337)
localAddr := net.TCPAddr{
IP: addr.Addr().AsSlice(),
Port: int(addr.Port()),
Zone: "",
}
ls, err := net.ListenTCP("tcp", &localAddr)
if err != nil {
fmt.Println("Error listening:", err)
return
}
defer ls.Close()
fmt.Println("Listening on 127.0.0.1:1337")
// ... (accept connections as before)
}net.Dial和net.Listen是Go语言网络编程中最常用的函数,用于建立连接和监听端口。DialTCP和ListenTCP提供了更细粒度的控制,但在大多数情况下,使用Dial和Listen就足够了。理解这些函数的使用场景和区别,可以帮助你构建高效可靠的网络应用。在选择使用哪个函数时,请根据你的程序的需求进行权衡。如果只需要建立简单的连接或监听端口,那么Dial和Listen是更好的选择。如果需要更细粒度的控制,例如指定本地地址,那么可以使用DialTCP和ListenTCP。
立即学习“go语言免费学习笔记(深入)”;
以上就是Go语言网络编程:连接、监听与TCP控制的详细内容,更多请关注php中文网其它相关文章!
编程怎么学习?编程怎么入门?编程在哪学?编程怎么学才快?不用担心,这里为大家提供了编程速学教程(入门课程),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号