下面我将详细讲解Go语言基于Socket编写服务器端与客户端通信的实例的攻略。
1. Socket简介
在网络编程中,Socket是一个抽象层,它负责建立让网络应用程序之间可以相互通讯的规范。通过Socket API,程序员可以方便地使用TCP/IP协议族进行网络通信。Socket是两个端点之间的双向通信,其中一个端点是服务器,另一个是客户端。
2. 基本流程
Go语言基于Socket编写服务器端与客户端通信的基本流程如下:
* 创建Socket
* 绑定Socket
* 监听Socket
* 接收客户端连接请求
* 处理客户端请求
* 关闭Socket
3. 示例1:基于Socket编写TCP服务器端
下面是一个基于Socket编写TCP服务器端的示例代码:
package main
import (
"fmt"
"net"
)
func main() {
// 创建socket,监听端口
l, err := net.Listen("tcp", ":8080")
if err != nil {
fmt.Println("Error listening:", err.Error())
return
}
// 等待客户端连接
for {
conn, err := l.Accept()
if err != nil {
fmt.Println("Error accepting: ", err.Error())
continue
}
// 开启新线程处理客户端请求
go handleRequest(conn)
}
}
func handleRequest(conn net.Conn) {
// 缓存区,我们使用256B大小的缓存区读取数据
buf := make([]byte, 256)
// 读取客户端发送的数据
reqLen, err := conn.Read(buf)
if err != nil {
fmt.Println("Error reading:", err.Error())
}
// 打印客户端发送的数据
fmt.Printf("Received data: %s\n", string(buf[:reqLen]))
// 发送响应给客户端
conn.Write([]byte("Hello from server!"))
// 关闭连接
conn.Close()
}
上述代码通过监听8080端口,接收客户端连接请求,并使用新线程处理客户端请求。handleRequest函数用于处理客户端请求,代码中使用256B的缓存区读取数据,并将客户端发送的数据打印到控制台上,然后向客户端发送一个字符串"Hello from server!",并关闭连接。
4. 示例2:基于Socket编写TCP客户端
下面是一个基于Socket编写TCP客户端的示例代码:
package main
import (
"fmt"
"net"
)
func main() {
// 连接服务器
conn, err := net.Dial("tcp", "127.0.0.1:8080")
if err != nil {
fmt.Println("Error dialing:", err.Error())
return
}
// 发送数据给服务器
_, err = conn.Write([]byte("Hello from client!"))
if err != nil {
fmt.Println("Error writing:", err.Error())
return
}
// 缓冲区,我们使用256B大小的缓存区读取数据
buf := make([]byte, 256)
// 读取服务器响应
resLen, err := conn.Read(buf)
if err != nil {
fmt.Println("Error reading:", err.Error())
return
}
// 打印服务器响应
fmt.Printf("Received data: %s\n", string(buf[:resLen]))
// 关闭连接
conn.Close()
}
上述代码中,我们使用net包中的Dial函数连接服务器,并向服务器发送数据"Hello from client!"。接着,我们使用256B的缓存区读取服务器发送的响应数据,并将其打印到控制台上,最后关闭连接。
以上是基于Socket编写Go语言TCP服务器端与客户端通信的示例。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Go语言基于Socket编写服务器端与客户端通信的实例 - Python技术站