golang 实现tcp socket 通信及golang编译
都说golang适合网络编程,知道今天写了tcp我才知道他到底有多简洁。(虽然已经对着golang的webrtc研究很久了)
首先是client端代码:
package main
import (
"bufio"
"fmt"
"net"
)
func main() {
conn, err := net.Dial("tcp", "192.168.1.106:8080")
if err != nil {
println("error")
}
p := []byte{255}
for {
nn, err := bufio.NewWriter(conn).Write(p)
if err != nil {
println("error")
}
fmt.Print(nn)
}
}
创建client端很简洁,只需要指定协议和ip地址就行了,而且一行就完成了,此时不得不提一下c写tcp socket的繁琐过程,虽然都是必不可少的,但是有了golang为什么又要去c受折磨呢:) golang的net包很强大,net。Dial正如函数名一样,拨号,对server端进行拨号,返回一个connection和一个error,对error的处理比较常见,可能是panic也可以是打印一下就算了,看个人需求。本文需要实现的功能是client端发送消息到server端,所以我在client端调用了bufio.NewWriter(conn).Write(p),将byte类型的p利用conn发送给server端。
代码写完了要如何编译呢?首先我们需要生成一个go.mod文件,该文件包含了我们使用的库和库版本,未生成时我们可以使用go mod init projectname来生成go.mod文件,该命令需要在项目所在文件夹执行,之后按照指示执行go mod tidy将我们的go.mod文件进行更新,包括增加或删除我们需要的/不需要的包,更新版本等,之后go build就可以生成可执行文件了
server端代码
package main
import(
"net"
"bufio"
"fmt"
)
func main(){
port:=":8080"
l,err:=net.Listen("tcp", port)
if err!=nil{
println("error")
}
defer l.Close()
for{
conn,err :=l.Accept()
if err!=nil{
println("error")
}
go handleConnection(conn)
}
}
func handleConnection(_conn net.Conn ){
for {
// var p []byte
p,err:=bufio.NewReader(_conn).ReadByte()
if err!=nil{
println("error")
}
fmt.Print(p)
}
}
server端监听端口8080,当监听到连接时,l.Accept()返回建立好的连接,之后就可以通信了
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效