使用Golang完成的的TCP服务器端和客户端通讯代码
使用golang进行socket编程,是很简单的一件事情,本文,用最基本的代码演示了Golang的TCP服务端和客户端通讯的代码。
如果你把文章中的:
listener, err := net.Listen("tcp", "127.0.0.1:8888")
与
conn, err := net.Dial("tcp", "127.0.0.1:8888")
处的 tcp改成udp,你会发现使用UDP进行socket编程,并没有太大哦。
服务器端代码
main.go
package main
import (
"fmt"
"net"
)
func handleConnection(conn net.Conn) {
// 处理连接
defer conn.Close()
// 读取数据
buffer := make([]byte, 1024)
n, err := conn.Read(buffer)
if err != nil {
fmt.Println("读取数据错误:", err)
return
}
// 打印数据
fmt.Println("收到数据:", string(buffer[:n]))
// 发送数据
_, err = conn.Write([]byte("Hello, World!"))
if err != nil {
fmt.Println("发送数据错误:", err)
return
}
}
func main() {
// 监听端口
listener, err := net.Listen("tcp", "127.0.0.1:8888")
if err != nil {
fmt.Println("监听端口错误:", err)
return
}
defer listener.Close()
// 等待连接
for {
conn, err := listener.Accept()
if err != nil {
fmt.Println("接受连接错误:", err)
continue
}
// 处理连接
go handleConnection(conn)
}
}
这个代码实现了一个简单的TCP网络服务,它监听端口8888,并且可以接受客户端连接。当有客户端连接上来之后,它会调用handleConnection
函数来处理连接。handleConnection
函数会读取客户端发送过来的数据,然后打印出来,并且发送一个”Hello, World!”的消息给客户端。
客户端代码
下面是一个相应的客户端代码:
package main
import (
"fmt"
"net"
)
func main() {
// 连接服务器
conn, err := net.Dial("tcp", "127.0.0.1:8888")
if err != nil {
fmt.Println("连接服务器错误:", err)
return
}
defer conn.Close()
// 发送数据
_, err = conn.Write([]byte("Hello, Server!"))
if err != nil {
fmt.Println("发送数据错误:", err)
return
}
// 读取数据
buffer := make([]byte, 1024)
n, err := conn.Read(buffer)
if err != nil {
fmt.Println("读取数据错误:", err)
return
}
// 打印数据
fmt.Println("收到数据:", string(buffer[:n]))
}
这个客户端代码会连接到TCP服务器,然后发送一个”Hello, Server!”的消息给服务器。它会等待服务器返回数据,并且打印出来。