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()返回建立好的连接,之后就可以通信了

posted @   wxlu  阅读(73)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效
点击右上角即可分享
微信分享提示