我无法接受Java中的套接字回复

时间:2017-12-20 15:20:08

标签: java sockets

我有这个问题。 我需要从本地网络连接的秤上读取权重。 从超级终端我连接到带端口的ip,打开连接,我发送字符串“XN”,输入,并且刻度在Hyperterminal写一个新行,权重为字符串。 我试图使用socket的代码做同样的事情,但我可以获得任何结果。 你能告诉我一些帮助我的例子吗?这是我尝试过的代码没有成功。

Socket echoSocket = null;
DataOutputStream os = null;
DataInputStream is = null;
try
{
    echoSocket = new Socket(IpBilancia, Porta);
    os = new DataOutputStream(echoSocket.getOutputStream());
    is = new DataInputStream(echoSocket.getInputStream());
}
catch (UnknownHostException e) {
    System.err.println("Don't know about host: " + IpBilancia);
}
catch (IOException e) 
{
    System.err.println("Couldn't get I/O for the connection to" + IpBilancia);
}
    try
    {
        os.writeBytes("XN");
        os.writeByte('\n');
        os.flush();
        BufferedReader input = new BufferedReader(new InputStreamReader(is));
        String Peso;
        while ((Peso = input.readLine()) != null) 
        {

            System.out.println("echo: " + is.readLine());
        }
        os.close();
        is.close();
        echoSocket.close();
    } catch (IOException e) {
        System.err.println("I/O failed on the connection to" + IpBilancia);
    }

edit1:

Socket echoSocket = null;
DataOutputStream os = null;
DataInputStream is = null;
try
{
    echoSocket = new Socket(IpBilancia, Porta);
    os = new DataOutputStream(echoSocket.getOutputStream());
    is = new DataInputStream(echoSocket.getInputStream());
}
catch (UnknownHostException e) {
    System.err.println("Don't know about host: " + IpBilancia);
}
catch (IOException e) 
{
    System.err.println("Couldn't get I/O for the connection to" + IpBilancia);
}
try
{
    os.writeBytes("XN");
    os.writeByte('\n');
    os.flush();
    BufferedReader input = new BufferedReader(new InputStreamReader(is));
    String Peso;
    while ((Peso = input.readLine()) != null) 
    {

        System.out.println("echo: " + is.readLine());
    }
    os.close();
    is.close();
    echoSocket.close();
} catch (IOException e) {
    System.err.println("I/O failed on the connection to" + IpBilancia);
}

调试停留在while循环上。它不会进入循环。 它停在这里 while((Peso = input.readLine())!= null) 什么都不做。

1 个答案:

答案 0 :(得分:1)

以下代码适用于netcat虚拟服务器(您的代码包含Jesper')

try
{
    os.writeBytes("XN");
    os.writeByte('\n');
    os.flush();
    BufferedReader input = new BufferedReader(new InputStreamReader(is));
    String peso;
    while ((peso = input.readLine()) != null)
    {
        System.out.println("echo: " + peso);
    }
    os.close();
    is.close();
    echoSocket.close();
} catch (IOException e) {
    System.err.println("I/O failed on the connection to" + IpBilancia);
}

您使用超级终端手动尝试服务器,因此我认为您的服务器是在Windows上。

也许你的超级终端的配置使用CRLF作为行尾?

在这种情况下,请尝试使用:

os.writeBytes("XN");
os.writeByte('\r');
os.writeByte('\n');

与Java客户端具有相同的EOL。