这期内容当中小编将会给大家带来有关插座服务端怎么利用golang语言实现,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。
插座服务器是网络服务中常用的服务器。使用去语言实现这个业务场景是很容易的。
这样的网络通讯,需要一个服务端和至少一个客户端。
我们计划构建一个这样的通讯工程。服务端启动后等待客户端的访问。客户端发送一段信息给服务端。服务端接收到信息后,再回馈给客户端一段信息。
首先要建立服务端。服务端最先要做的事情就是“建立插座端口监听“。
netListen,犯错:=net.Listen (“tcp",“localhost: 1024“)
引用>上面的代码,表名监听的是本机端口1024,而使用的通讯协议是TCP。
当监听结束,模块任务完成后,最后要关闭这个netListen。
推迟netListen.Close ()
引用>使用日志功能,让服务端窗口能看到服务端已经运行了。
日志(“等待客户…“)
引用>之后使用一个为循环,无尽的等待那些不知何时来访问的客户端信息。
循环体内,要监听netListen的信息接收情况:
康涅狄格州,犯错:=netListen.Accept ()
引用>当有来自客户端的访问时,接受访问。并在服务端的日志记录已经有客户端连接成功了。
日志(conn.RemoteAddr () .String (),“TCP连接success")
引用>conn.RemoteAddr () .String()表示的就是远程客户端。
然后,我们开启一个goroutine处理连接任务。
去handleConnection(康涅狄格州)
引用>处理过程就是接收客户端信息和反馈给客户端信息。
n,犯错:=conn.Read(缓冲)
conn.Write([]字节(strTemp))
引用><强>服务端代码示例强>
package main import ( “才能net" “才能fmt" “才能os" “才能log" “才能time" ) , func main (), {//建才能立插座端口监听 netListen,才能,err :=, net.Listen (“tcp",,“localhost: 1024“) CheckError才能(err), defer 才能;netListen.Close (), 日志才能(“Waiting  for clients …“) ,//等才能待客户端访问 为{才能 ,,,康涅狄格州,err :=, netListen.Accept(),,,//监听接收 ,,,if err !=, nil { ,,,,,continue ,,,//如果发生错误,继续下一个循环。 ,,,}, ,,,日志(conn.RemoteAddr () .String (),“tcp connect success"),//tcp连接成功 ,,,go handleConnection(康涅狄格州) ,,} } ,//处理连接 func handleConnection (conn net.Conn), { buffer :=,才能使([]字节,2048,),,,,//建立一个片 为{才能 ,,,n, err :=, conn.Read(缓冲),,,//读取客户端传来的内容 ,,,if err !=, nil { ,,,,,日志(conn.RemoteAddr () .String (),“connection 错误:,,,,呃) ,,,,,return ,,//当远程客户端连接发生错误(断开)后,终止此协程。 ,,,}, ,,,日志(conn.RemoteAddr () .String (),“receive data 字符串:\ n",,字符串(缓冲区(:n))) , ,,,//返回给客户端的信息 ,,,strTemp :=,“CofoxServer got msg \““+字符串(缓冲[:n]) +“\”, at “+ time.Now () .String () ,,,conn.Write([]字节(strTemp)) ,,} } ,//日志处理 func 日志(v ……接口{}),{ log.Println才能(v…) } ,//错误处理 func CheckError (err 错误),{ if 才能;err  !=, nil { ,,,fmt.Fprintf (os.Stderr,“Fatal 错误:,% s",, err.Error ()) ,,} }客户端的业务逻辑是,发送信息给服务端,然后接收服务端的反馈。
康涅狄格州,犯错:=net.DialTCP (“tcp", nil, tcpAddr)
引用>用TCP协议拨号(拨号)到服务端。如果没有发生错误,就说明拨通了。于是在客户端日志记录连接成功
fmt.Println(“连接success")
引用>然后在这个已经通畅的连接里,进行发送和接收信息的任务.conn.Write([]字节(字))是发送信息;conn.Read(缓冲)是接收信息。如果接收发生错误,就记录错误:
日志(conn.RemoteAddr () .String(),“等待服务器返回味精错误:“,犯错)
引用>并且中断进程。
如果没有发生错误,酒吧接收到的信息在日志中记录。
套接字服务端怎么利用golang语言实现