GO-TCP

yfl8910 · · 5842 次点击 · 开始浏览    置顶
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。

package main import ( "net" "fmt" ) var ( maxRead = 1100 msgStop = []byte("cmdStop") msgStart = []byte("cmdContinue") ) func main() { hostAndPort := "localhost:54321" listener := initServer(hostAndPort) for { conn, err := listener.Accept() checkError(err, "Accept: ") go connectionHandler(conn) } } func initServer(hostAndPort string) *net.TCPListener { serverAddr, err := net.ResolveTCPAddr("tcp", hostAndPort) checkError(err, "Resolving address:port failed: '" + hostAndPort + "'") listener, err := net.ListenTCP("tcp", serverAddr) checkError(err, "ListenTCP: ") println("Listening to: ", listener.Addr().String()) return listener } func connectionHandler(conn net.Conn) { connFrom := conn.RemoteAddr().String() println("Connection from: ", connFrom) talktoclients(conn) for { var ibuf []byte = make([]byte, maxRead + 1) length, err := conn.Read(ibuf[0:maxRead]) ibuf[maxRead] = 0 // to prevent overflow switch err { case nil: handleMsg(length, err, ibuf) default: goto DISCONNECT } } DISCONNECT: err := conn.Close() println("Closed connection:" , connFrom) checkError(err, "Close:" ) } func talktoclients(to net.Conn) { wrote, err := to.Write(msgStart) checkError(err, "Write: wrote " + string(wrote) + " bytes.") } func handleMsg(length int, err error, msg []byte) { if length > 0 { for i := 0; ; i++ { if msg[i] == 0 { break } } fmt.Printf("Received data: %v", string(msg[0:length])) fmt.Println(" length:",length) } } func checkError(error error, info string) { if error != nil { panic("ERROR: " + info + " " + error.Error()) // terminate program } }

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

5842 次点击  
加入收藏 微博
3 回复  |  直到 2018-04-04 10:41:23
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传