分享
【请教】socket客户端conn.Write()发送的内容末尾加上\n就能得到server端回应,否则超时,请帮忙看看是客户端还是server端问题,先谢谢了
jimyokl · · 1669 次点击 · 开始浏览 置顶这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。
客户端建立连接:
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
关注微信1669 次点击
添加一条新回复
(您需要 后才能回复 没有账号 ?)
- 请尽量让自己的回复能够对别人有帮助
- 支持 Markdown 格式, **粗体**、~~删除线~~、
`单行代码` - 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
- 图片支持拖拽、截图粘贴等方式上传