GO语言实现简单TCP服务的方法
本文实例讲述了GO语言实现简单TCP服务的方法。分享给大家供大家参考。具体实现方法如下:
packagemain import( "net" "fmt" ) var( maxRead=1100 msgStop =[]byte("cmdStop") msgStart =[]byte("cmdContinue") ) funcmain(){ hostAndPort:="localhost:54321" listener:=initServer(hostAndPort) for{ conn,err:=listener.Accept() checkError(err,"Accept:") goconnectionHandler(conn) } } funcinitServer(hostAndPortstring)*net.TCPListener{ serverAddr,err:=net.ResolveTCPAddr("tcp",hostAndPort) checkError(err,"Resolvingaddress:portfailed:'"+hostAndPort+"'") listener,err:=net.ListenTCP("tcp",serverAddr) checkError(err,"ListenTCP:") println("Listeningto:",listener.Addr().String()) returnlistener } funcconnectionHandler(connnet.Conn){ connFrom:=conn.RemoteAddr().String() println("Connectionfrom:",connFrom) talktoclients(conn) for{ varibuf[]byte=make([]byte,maxRead+1) length,err:=conn.Read(ibuf[0:maxRead]) ibuf[maxRead]=0//topreventoverflow switcherr{ casenil: handleMsg(length,err,ibuf) default: gotoDISCONNECT } } DISCONNECT: err:=conn.Close() println("Closedconnection:",connFrom) checkError(err,"Close:") } functalktoclients(tonet.Conn){ wrote,err:=to.Write(msgStart) checkError(err,"Write:wrote"+string(wrote)+"bytes.") } funchandleMsg(lengthint,errerror,msg[]byte){ iflength>0{ fori:=0;;i++{ ifmsg[i]==0{ break } } fmt.Printf("Receiveddata:%v",string(msg[0:length])) fmt.Println(" length:",length) } } funccheckError(errorerror,infostring){ iferror!=nil{ panic("ERROR:"+info+""+error.Error())//terminateprogram } }
希望本文所述对大家的Go语言程序设计有所帮助。