在计算机通信领域,socket
被翻译为“套接字”,它是计算机之间进行通信的一种约定或一种方式。通过
socket
这种约定,一台计算机可以接收其他计算机的数据,也可以向其他计算机发送数据。
本文介绍如何使用golang实现socket通信。
TCP
TCP服务端
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
| package main
import ( "bytes" "fmt" "net" )
func main() { listener, err := net.Listen("tcp", "127.0.0.1:7890") if err != nil { panic(err) } defer listener.Close() for { conn, err := listener.Accept() if err != nil { return } go func(conn net.Conn) { var buffer bytes.Buffer for { var buffarr = make([]byte, 1) _, err := conn.Read(buffarr) if err != nil { panic(err) } b := buffarr[0] if b == '\t' { break } buffer.WriteByte(b)
} fmt.Println("get msg from client:", buffer.String())
}(conn) } }
|
TCP客户端
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| package main
import ( "bytes" "net" )
func main() { conn, err := net.Dial("tcp", "127.0.0.1:7890") if err != nil { panic(err) } var buffer bytes.Buffer buffer.WriteString("Hi, I am a client") buffer.WriteByte('\t') _, err = conn.Write(buffer.Bytes()) if err != nil { panic(err) } }
|
UDP
UDP服务端
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| package main
import ( "fmt" "net" )
func main() { conn, err := net.ListenUDP( "udp", &net.UDPAddr{ IP: net.ParseIP("127.0.0.1"), Port: 7890, }, ) if err != nil { panic(err) } defer conn.Close() bytearray := make([]byte, 1024) for { n, _, err := conn.ReadFrom(bytearray) if err != nil { panic(err) } fmt.Println("get msg from client:", string(bytearray[:n])) } }
|
UDP客户端
```go package main
import ( "bytes" "net" )
func main() { conn, err := net.Dial("udp", "127.0.0.1:7890") if err
!= nil { panic(err) } defer conn.Close() var bytebuffer bytes.Buffer
bytebuffer.WriteString("hello, I am a udp client") _, err =
conn.Write(bytebuffer.Bytes()) if err != nil { panic(err) }
}