Linux Golang如何实现网络通信
导读:在Linux环境下使用Go语言(Golang)实现网络通信,通常会涉及到几个核心的包,如net、http等。以下是一些基本的网络通信实现方式: 1. TCP网络通信 使用net包可以实现TCP客户端和服务器。 TCP服务器示例: packa...
在Linux环境下使用Go语言(Golang)实现网络通信,通常会涉及到几个核心的包,如net、http等。以下是一些基本的网络通信实现方式:
1. TCP网络通信
使用net包可以实现TCP客户端和服务器。
TCP服务器示例:
package main
import (
"bufio"
"fmt"
"net"
)
func main() {
listener, err := net.Listen("tcp", ":8080")
if err != nil {
panic(err)
}
defer listener.Close()
fmt.Println("Server is listening on port 8080...")
for {
conn, err := listener.Accept()
if err != nil {
fmt.Println("Error accepting connection:", err)
continue
}
go handleRequest(conn)
}
}
func handleRequest(conn net.Conn) {
defer conn.Close()
reader := bufio.NewReader(conn)
message, err := reader.ReadString('\n')
if err != nil {
fmt.Println("Error reading:", err)
return
}
fmt.Print("Received message:", message)
_, err = conn.Write([]byte("Message received\n"))
if err != nil {
fmt.Println("Error writing:", err)
}
}
TCP客户端示例:
package main
import (
"bufio"
"fmt"
"net"
)
func main() {
conn, err := net.Dial("tcp", "localhost:8080")
if err != nil {
panic(err)
}
defer conn.Close()
fmt.Println("Connected to server.")
reader := bufio.NewReader(conn)
fmt.Print("Enter message: ")
message, _ := reader.ReadString('\n')
_, err = conn.Write([]byte(message))
if err != nil {
fmt.Println("Error sending message:", err)
return
}
response, err := bufio.NewReader(conn).ReadString('\n')
if err != nil {
fmt.Println("Error reading response:", err)
return
}
fmt.Print("Server response:", response)
}
2. UDP网络通信
使用net包也可以实现UDP客户端和服务器。
UDP服务器示例:
package main
import (
"fmt"
"net"
)
func main() {
address, err := net.ResolveUDPAddr("udp", ":8080")
if err != nil {
panic(err)
}
conn, err := net.ListenUDP("udp", address)
if err != nil {
panic(err)
}
defer conn.Close()
fmt.Println("Server is listening on port 8080...")
buffer := make([]byte, 1024)
for {
n, addr, err := conn.ReadFromUDP(buffer)
if err != nil {
fmt.Println("Error reading:", err)
continue
}
fmt.Printf("Received message from %s: %s\n", addr.String(), string(buffer[:n]))
_, err = conn.WriteToUDP([]byte("Message received"), addr)
if err != nil {
fmt.Println("Error sending response:", err)
}
}
}
UDP客户端示例:
package main
import (
"fmt"
"net"
)
func main() {
address, err := net.ResolveUDPAddr("udp", "localhost:8080")
if err != nil {
panic(err)
}
conn, err := net.DialUDP("udp", nil, address)
if err != nil {
panic(err)
}
defer conn.Close()
message := "Hello, UDP Server!"
_, err = conn.Write([]byte(message))
if err != nil {
fmt.Println("Error sending message:", err)
return
}
buffer := make([]byte, 1024)
n, _, err := conn.ReadFromUDP(buffer)
if err != nil {
fmt.Println("Error reading response:", err)
return
}
fmt.Printf("Server response: %s\n", string(buffer[:n]))
}
3. HTTP网络通信
使用net/http包可以实现HTTP客户端和服务器。
HTTP服务器示例:
package main
import (
"fmt"
"net/http"
)
func handler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hello, World!")
}
func main() {
http.HandleFunc("/", handler)
fmt.Println("Server is listening on port 8080...")
err := http.ListenAndServe(":8080", nil)
if err != nil {
panic(err)
}
}
HTTP客户端示例:
package main
import (
"fmt"
"io/ioutil"
"net/http"
)
func main() {
resp, err := http.Get("http://localhost:8080/")
if err != nil {
panic(err)
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
panic(err)
}
fmt.Println(string(body))
}
以上代码示例展示了如何在Linux环境下使用Go语言实现基本的网络通信。根据实际需求,你可以选择合适的网络协议和模式来实现更复杂的功能。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Linux Golang如何实现网络通信
本文地址: https://pptw.com/jishu/773137.html
