【请教】socket客户端conn.Write()发送的内容末尾加上\n就能得到server端回应,否则超时,请帮忙看看是客户端还是server端问题,先谢谢了

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

客户端建立连接: conn, err := net.DialTimeout("tcp", destIPPort, 3*time.Second) if err != nil { Log(LL_INFO, "tcp connect error bef process log file, please check it.") return err } defer func() { if nil != conn { conn.Close() } }() 客户端发送和接收: scanner := bufio.NewScanner(file) for scanner.Scan() { line := scanner.Text() index := strings.Index(line, "=") index = index + 1 req := line[index:] //req = req + "\n" //4post reqSent := []byte(req) numSent, err := conn.Write(reqSent) ... //对err和numSent的异常处理 conn.SetReadDeadline(time.Now().Add(3 * time.Second)) numRecv, err := conn.Read(buff) if err != nil || numRecv < 0 { if err == io.EOF || err == syscall.EINVAL { Log(LL_INFO, "tcp connect is already closed.") return err } if 0 == numRecv { if nil != conn { conn.Close() } Log(LL_INFO,"4_post_log, err and numRecv: ", err, " . numRecv: ", numRecv) conn, err = net.DialTimeout("tcp", destIPPort, 6*time.Second) if err != nil { Log(LL_INFO, "tcp connect error:", err, ", please check it.") return err } }else{ Log(LL_INFO, "tcp receive data error:", err, ", please check it.") return err } } Log(LL_INFO, "recv data:", string(buff[0:numRecv])) } server对端处理连接代码(echo发送收到的内容回去给客户端): func handleConn(c net.Conn) { input := bufio.NewScanner(c) for input.Scan() { lineRecv := input.Text() fmt.Println(lineRecv) fmt.Fprintln(c, lineRecv) } c.Close() } 如果我把“req = req + "\n"”这行注释掉,不加\n在末尾,则报错: 2017-09-26 13:36:03 <LL_INFO> 4_post_log, err and numRecv: read tcp 127.0.0.1:51863->127.0.0.1:12345: i/o timeout . numRecv: 0 如果在末尾加上“\n",则能收到server端echo回来的数据(如下是日志): 2017-09-26 13:53:12 <LL_INFO> Data sent:hnd {1} Total sent 8bytes. 2017-09-26 13:53:12 <LL_INFO> Data sent finished, begin to recv... 2017-09-26 13:53:12 <LL_INFO> recv data:hnd {1}

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

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

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