golang实现简单的tcp通信
简单代码
服务端
//Server.go
package main
import (
"fmt"
"net"
"os"
)
func main(){
//服务端在本机8888端口建立tcp监听
listener,err :=net.Listen("tcp","127.0.0.1:8888")
ServerHandleError(err,"net.listen")
for {
//循环接入所有客户端得到专线连接
conn,e := listener.Accept()
ServerHandleError(e,"listener.accept")
//开辟独立协程与该客聊天
go ChatWith(conn)
}
}
func ServerHandleError(err error,when string) {
if err != nil {
fmt.Println(err, when)
os.Exit(1)
}
}
//在conn网络专线中与客户端对话
func ChatWith(conn net.Conn){
//创建消息缓冲区
buffer := make([]byte, 1024)
for {
///---一个完整的消息回合
//读取客户端发来的消息放入缓冲区
n,err := conn.Read(buffer)
ServerHandleError(err,"conn.read buffer")
//转化为字符串输出
clientMsg := string(buffer[0:n])
fmt.Printf("收到消息",conn.RemoteAddr(),clientMsg)
//回复客户端消息
if clientMsg != "im off" {
conn.Write([]byte("已读:"+clientMsg))
} else {
conn.Write([]byte("bye"))
break
}
}
conn.Close()
fmt.Printf("客户端断开连接",conn.RemoteAddr())
}
客户端
//Client.go
package main
import (
"bufio"
"fmt"
"net"
"os"
)
func ClientHandleError(err error, when string){
if err != nil {
fmt.Println(err, when)
os.Exit(1)
}
}
func main(){
//拨号远程地址,简历tcp连接
conn, err := net.Dial("tcp","127.0.0.1:8888")
ClientHandleError(err, "client conn error")
//预先准备消息缓冲区
buffer := make([]byte,1024)
//准备命令行标准输入
reader := bufio.NewReader(os.Stdin)
for {
lineBytes,_,_ := reader.ReadLine()
conn.Write(lineBytes)
n,err := conn.Read(buffer)
ClientHandleError(err, "client read error")
serverMsg := string(buffer[0:n])
fmt.Printf("服务端msg",serverMsg)
if serverMsg == "bye" {
break
}
}
}
简单测试
客户端发消息
服务端读消息
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
2018-02-05 PHP实现多进程并行操作,可做守护进程(转,备用)
2018-02-05 php多进程结合Linux利器split命令实现把大文件分批高效处理
2018-02-05 Centos文件切割利器_split命令及cat命令合并文件