前言
通过 Golang 的原生包 net 可以创建一个 TCP 的进程来进行通信,这里分别通过两个代码,一个实现客户端,一个实现服务端,使用客户端发送消息,然后服务端来接受
首先我们看下代码
客户端代码
package main
import (
"bufio"
"fmt"
"net"
"os"
"strings"
)
func main() {
conn, err := net.Dial("tcp", "127.0.0.1:9080")
defer conn.Close()
if err != nil {
fmt.Printf("connect failed, err: %v\n", err)
return
}
inputReader := bufio.NewReader(os.Stdin)
for {
input, err := inputReader.ReadString('\n')
if err != nil {
fmt.Printf("read from console failed, err: %v\n", err)
break
}
trimmedInput := strings.TrimSpace(input)
if trimmedInput == "Q" {
break
}
_, err = conn.Write([]byte(trimmedInput))
if err != nil {
fmt.Printf("write failed, err: %v\n", err)
break
}
}
}
服务端代码
package main
import (
"fmt"
"net"
)
func main() {
listener, err := net.Listen("tcp", "0.0.0.0:9080")
if err != nil {
fmt.Printf("listen failed, err: %v\n", err)
return
}
for {
conn, err := listener.Accept()
if err != nil {
fmt.Printf("accept fail, err: %v\n", err)
continue
}
go process(conn)
}
}
func process(conn net.Conn) {
defer conn.Close()
for {
var buf [128]byte
n, err := conn.Read(buf[:])
if err != nil {
fmt.Printf("read from connect failed,err :%v\n", err)
break
}
str := string(buf[:n])
fmt.Printf("receive from client: %v\n", str)
}
}
实现效果
启动 server 端以及 client 端
我们客户端发送消息,然后可以在服务端收到消息
启动:
服务端成功收到消息: