套接字编程:是额外的'\n';添加到golang客户端还是Java服务器?
我已经编写了一个Java TCP套接字服务,该服务由golang客户机使用 当在golang端解析服务器套接字响应时,事情变得很奇怪 具体而言,此Java服务器代码:套接字编程:是额外的'\n';添加到golang客户端还是Java服务器?,java,sockets,go,Java,Sockets,Go,我已经编写了一个Java TCP套接字服务,该服务由golang客户机使用 当在golang端解析服务器套接字响应时,事情变得很奇怪 具体而言,此Java服务器代码: BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(output)); bw.append('Y'); bw.append('E'); bw.append('S'); bw.append('\n'); bw.flush(); 这是golang
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(output));
bw.append('Y');
bw.append('E');
bw.append('S');
bw.append('\n');
bw.flush();
这是golang的客户代码:
extendTimoutFor(client.conn)
rspMsg, fault := bufio.NewReader(client.conn).ReadString('\n')
if fault != nil {
return UNKNOWN, fmt.Errorf("Ers reading response: %v", fault)
}
retStr := strings.TrimRight(rspMsg, "\n")
if retStr == YES {
return YES, nil
}
if retStr == NO {
return NO, nil
}
if retStr == FAIL {
return FAIL, nil
}
return UNKNOWN, fmt.Errorf("Ers parsing msg [%s]: %v", rspMsg, fault)
在客户端生成此结果:
[UNDO|test|]: Ers parsing msg [YES
]: <nil>
[UNDO | test |]:Ers解析消息[是]
]:
我对结果的问题是,客户端无法将retStr识别为有效响应。由于rspMsg是我们所期望的(即“YES\n”),那么如果我们在未知块中,这意味着在此行中出现了错误:retStr:=strings.trimrright(rspMsg,“\n”)
我的具体问题是:
- 使用java.io.PrintWriter在整个输出中引入了一些意外字符李>
- strings.TrimRight(rspMsg,“\n”)屏蔽了上述点,但在安装Golang并调试脚本后得到了确认(使用strings.TrimSpace进行上述操作是一种更可靠的方法)
- 切换到java.io.OutputStream.write()简化了发送到客户端的输出
rspMsg
,而不是retStr
。什么是是
,否
和失败
?@ChristopherSchneider-唉,我没有在我的机器上运行Go,所以我不知道。。。我要求客户提供代码以了解发生了什么。安装和运行Go客户端将是我的下一步。@tkausl-很好。我会澄清问题。我假设[link]trimRight函数可以像广告中所宣传的那样工作,所以我真的想弄清楚为什么retStr看起来不正确<代码>是、否
和失败
是服务器的结果。它们指定字符串的格式是否正确。目前,YES
是硬编码的,而我在您的代码中调试客户端问题,YES
、NO
和FAIL
是变量引用。这就是为什么tkausl问他们是什么-他们的价值观是什么?它们没有在代码段中定义。输出消息包含换行符,因为您正在打印rspMsg,它是原始的未修剪值。如果您改为输出retStr,这是您的修剪值,您会得到什么?