在Linux下使用Go语言进行网络编程,你可以利用Go标准库中的"net"包来实现。以下是一个简单的TCP服务器和客户端的示例。
package main
import (
"bufio"
"fmt"
"net"
"os"
)
func main() {
// 监听端口
listener, err := net.Listen("tcp", ":8080")
if err != nil {
fmt.Println("Error listening:", err.Error())
os.Exit(1)
}
defer listener.Close()
fmt.Println("Listening on :8080")
for {
// 接受客户端连接
conn, err := listener.Accept()
if err != nil {
fmt.Println("Error accepting connection:", err.Error())
continue
}
// 处理客户端连接
go handleConnection(conn)
}
}
func handleConnection(conn net.Conn) {
defer conn.Close()
reader := bufio.NewReader(conn)
for {
// 读取客户端发送的数据
message, err := reader.ReadString('\n')
if err != nil {
fmt.Println("Error reading from connection:", err.Error())
break
}
fmt.Print("Received message: ", string(message))
// 向客户端发送响应
_, err = conn.Write([]byte("Message received\n"))
if err != nil {
fmt.Println("Error writing to connection:", err.Error())
break
}
}
}
package main
import (
"bufio"
"fmt"
"net"
"os"
)
func main() {
// 连接到服务器
conn, err := net.Dial("tcp", "localhost:8080")
if err != nil {
fmt.Println("Error connecting to server:", err.Error())
os.Exit(1)
}
defer conn.Close()
reader := bufio.NewReader(os.Stdin)
for {
fmt.Print("Enter message: ")
message, _ := reader.ReadString('\n')
// 向服务器发送数据
_, err = conn.Write([]byte(message))
if err != nil {
fmt.Println("Error sending message to server:", err.Error())
break
}
// 读取服务器响应
response, err := bufio.NewReader(conn).ReadString('\n')
if err != nil {
fmt.Println("Error reading response from server:", err.Error())
break
}
fmt.Print("Server response: ", response)
}
}
首先运行服务器程序,然后运行客户端程序。客户端可以连接到服务器并发送消息,服务器接收消息并发送响应。
这只是一个简单的示例,你可以根据需要扩展功能,例如实现并发处理多个客户端连接、使用UDP协议等。