Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
套接字编程:是额外的'\n';添加到golang客户端还是Java服务器?_Java_Sockets_Go - Fatal编程技术网

套接字编程:是额外的'\n';添加到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

我已经编写了一个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的客户代码:

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”)

我的具体问题是:

  • 既然有零个错误,那么“\n”和(后面的任何字符)不应该被删除,留下“是”吗
  • 我是否错过了Java方面的一些怪癖?我已经使用Java重新创建了客户机,输出就是我所期望的
  • 既然有零个错误,那么“\n”和(后面的任何字符)不应该被删除,留下“是”吗?

  • 我是否错过了Java方面的一些怪癖?我已经使用Java重新创建了客户机,输出就是我所期望的。

  • 通过以下几个步骤解决了这一问题:

    • 使用java.io.PrintWriter在整个输出中引入了一些意外字符
    • strings.TrimRight(rspMsg,“\n”)屏蔽了上述点,但在安装Golang并调试脚本后得到了确认(使用strings.TrimSpace进行上述操作是一种更可靠的方法)
    • 切换到java.io.OutputStream.write()简化了发送到客户端的输出

    运行调试器时,rspMsg是什么样子的?这是一个完美的例子:1、2、3:因为您打印的是
    rspMsg
    ,而不是
    retStr
    。什么是
    失败
    ?@ChristopherSchneider-唉,我没有在我的机器上运行Go,所以我不知道。。。我要求客户提供代码以了解发生了什么。安装和运行Go客户端将是我的下一步。@tkausl-很好。我会澄清问题。我假设[link]trimRight函数可以像广告中所宣传的那样工作,所以我真的想弄清楚为什么retStr看起来不正确<代码>是、
    失败
    是服务器的结果。它们指定字符串的格式是否正确。目前,
    YES
    是硬编码的,而我在您的代码中调试客户端问题,
    YES
    NO
    FAIL
    是变量引用。这就是为什么tkausl问他们是什么-他们的价值观是什么?它们没有在代码段中定义。输出消息包含换行符,因为您正在打印rspMsg,它是原始的未修剪值。如果您改为输出retStr,这是您的修剪值,您会得到什么?