2

我有以下代码(尝试)写入服务器:

    String serverName = "w.x.y.z"; 
    int port = 3010;

    InetAddress inetAddress = InetAddress.getByName(serverName);

    Socket socket = new Socket(inetAddress, port);

    BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
    bufferedWriter.write(transactionString);
    bufferedWriter.write(headerString);
    bufferedWriter.write(loginString);
    bufferedWriter.flush();

    String result = null;
    BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
    StringBuilder sb = new StringBuilder();
    String str;
    while ((str = bufferedReader.readLine()) != null)
    {
        sb.append(str + "\n");
    }
    result = new String(sb);
    debug("done with reads");

    textArea.setText(new String(result));
}
catch (UnknownHostException e)
{
    // TODO Auto-generated catch block
    e.printStackTrace();
}
catch (IOException e)
{
    // TODO Auto-generated catch block
    e.printStackTrace();
}

我在远程机器上的服务器代码中有一个断点,并且我有一个通过同一个套接字进行通信的 Visual Basic 程序。我已经运行了 Visual Basic 代码并(反复)验证了服务器在那里,正在侦听这个套接字,并且我可以通过运行该程序来达到我的断点。

当我运行这个程序时,我没有遇到断点。我尝试了各种有关设置套接字的方法,例如仅使用“new Socket()”实例化套接字,然后使用 setter 方法设置 inetAddress 和端口号。我使用的是 OutputStreamWriter 而不是 BufferedWriter。我已经尝试过将 KeepAlive 设置为 false 并将超时设置为 15 秒。它都不会导致服务器达到其断点。

我得到以下输出。

java.net.SocketException: Connection reset
    at java.net.SocketInputStream.read(Unknown Source)
    at sun.nio.cs.StreamDecoder.readBytes(Unknown Source)
    at sun.nio.cs.StreamDecoder.implRead(Unknown Source)
    at sun.nio.cs.StreamDecoder.read(Unknown Source)
    at java.io.InputStreamReader.read(Unknown Source)
    at java.io.BufferedReader.fill(Unknown Source)
    at java.io.BufferedReader.readLine(Unknown Source)
    at java.io.BufferedReader.readLine(Unknown Source)

当然还有更多的 stackTrace 行。

这不是数据格式问题;一旦服务器听到该端口上的消息,断点就应该被击中,然后才有机会确定它是否有效。这不是服务器工作的问题,因为它在这个端口和来自其他程序的套接字上工作。我已经三重检查了两者之间的地址和端口号;我认为那里不会有任何问题。

这不是任何形式的阅读问题。正如我所说,大型机上的断点没有被命中。

我在调用 getByName() 后设置了一个断点,在调试器中打开 inetAddress,找到代表 IP 地址的 4 字节 int,并翻译每个十六进制字节——从域名翻译后,具有相同的 IP 地址我从运行所有这些的机器上对服务器进行 ping 操作。

有人可以建议我在哪里看吗?

4

1 回答 1

0

原来服务器需要一个 SSL 套接字。感谢那些做出回应的人。

于 2012-05-05T21:20:56.970 回答