[Golang] 从零开始写Socket Server(1): Socket-Client框架

[Golang] 从零开始写Socket Server(1): Socket-Client框架,第1张

概述第一次跑到互联网公司实习 。。感觉自己进步飞快啊~第一周刚写了个HTTP服务器用于微信公共号的点餐系统~ 第二周就直接开始一边自学GO语言一边写用于Socket的服务器了。。。 因为发现Golang这一块资料挺少的,接下来我会在Blog里把整个Server的Coding,还有遇到的坑都记录下来~ 在golang中,网络协议已经被封装的非常完好了,想要写一个Socket的Server,我们并不用像其

第一次跑到互联网公司实习 。。感觉自己进步飞快啊~第一周刚写了个http服务器用于微信公共号的点餐系统~ 第二周就直接开始一边自学GO语言一边写用于Socket的服务器了。。。

因为发现Golang这一块资料挺少的,接下来我会在Blog里把整个Server的Coding,还有遇到的坑都记录下来~

在golang中,网络协议已经被封装的非常完好了,想要写一个Socket的Server,我们并不用像其他语言那样需要为socket、bind、Listen、receive等一系列 *** 作头疼,只要使用Golang中自带的net包即可很方便的完成连接等 *** 作~

在这里,给出一个最最基础的基于Socket的Server的写法:

package mainimport (	"fmt"	"net"	"log"	"os")func main() {//建立socket,监听端口	netListen,err := net.Listen("tcp","localhost:1024")	Checkerror(err)	defer netListen.Close()	Log("Waiting for clIEnts")	for {		conn,err := netListen.Accept()		if err != nil {			continue		}		Log(conn.RemoteAddr().String()," tcp connect success")		handleConnection(conn)	}}//处理连接func handleConnection(conn net.Conn) {	buffer := make([]byte,2048)	for {		n,err := conn.Read(buffer)		if err != nil {			Log(conn.RemoteAddr().String()," connection error: ",err)			return		}		Log(conn.RemoteAddr().String(),"receive data string:\n",string(buffer[:n]))	}}func Log(v ...interface{}) {	log.Println(v...)}func Checkerror(err error) {	if err != nil {		fmt.Fprintf(os.Stderr,"Fatal error: %s",err.Error())		os.Exit(1)	}}


唔,抛除Go语言里面10行代码有5行error的蛋疼之处,你可以看到,Server想要建立并接受一个Socket,其核心流程就是

netListen,"localhost:1024")
conn,err := netListen.Accept()
n,err := conn.Read(buffer)

这三步,通过Listen、Accept 和Read,我们就成功的绑定了一个端口,并能够读取从该端口传来的内容~

Server写好之后,接下来就是ClIEnt方面啦,我手写一个HelloWorld给大家:

package mainimport (	"fmt"	"net"	"os")func sender(conn net.Conn) {		words := "Hello World!"		conn.Write([]byte(words))	fmt.Println("send over")}func main() {	server := "127.0.0.1:1024"	tcpAddr,err := net.ResolveTCPAddr("tcp4",server)	if err != nil {		fmt.Fprintf(os.Stderr,err.Error())		os.Exit(1)	}	conn,err := net.DialTCP("tcp",nil,tcpAddr)	if err != nil {		fmt.Fprintf(os.Stderr,err.Error())		os.Exit(1)	}	fmt.Println("connect success")	sender(conn)}

可以看到,ClIEnt这里的关键在于

tcpAddr,server)

conn,tcpAddr)


这两步,主要是负责解析端口和连接~

写好Server和ClIEnt之后,让我们运行一下看看:~~

成功运行,Console出现Server等待连接的提示:




然后我们运行ClIEnt:



成功连接Server啦,让我们看看Server那边的成果:


Server端成功的收到了我们的Hello-World啦,至于后面的那行红字,则是断开连接的提示~


到这里,一个最基础的使用Socket的Server-ClIEnt框架就出来啦~

如果想要让Server能够响应来自不同ClIEnt的请求,我们只要在Server端的代码的main入口中,

在handleConnection(conn net.Conn) 这句代码的前面加上一个 go,就可以让服务器并发处理不同的ClIEnt发来的请求啦


关于Golang的并发处理,可以参考这里Golang并行计算


下一篇,我会写一下如何在Server和ClIEnt中设计一个通讯协议,从而达到自己的一些特殊要求~

总结

以上是内存溢出为你收集整理的[Golang] 从零开始写Socket Server(1): Socket-Client框架全部内容,希望文章能够帮你解决[Golang] 从零开始写Socket Server(1): Socket-Client框架所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1287435.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-09
下一篇 2022-06-09

发表评论

登录后才能评论

评论列表(0条)

保存