Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.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
Java 套接字通信未到达服务器_Java_Sockets - Fatal编程技术网

Java 套接字通信未到达服务器

Java 套接字通信未到达服务器,java,sockets,Java,Sockets,我有以下代码要(尝试)写入服务器: String serverName = "w.x.y.z"; int port = 3010; InetAddress inetAddress = InetAddress.getByName(serverName); Socket socket = new Socket(inetAddress, port); BufferedWriter bufferedWriter = new BufferedWriter(n

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

    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程序。我已经运行了visualbasic代码,并且(反复)验证了服务器是否在那里,正在侦听这个套接字,并且我可以通过运行该程序来命中断点

当我运行这个程序时,我没有碰到断点。关于设置套接字,我尝试了各种方法,例如仅使用“newsocket()”实例化套接字,然后使用setter方法设置inetAddress和端口号。我使用了OutputStreamWriter而不是BufferedWriter。我尝试过将KeepAlive设置为false,将timeout设置为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)
当然还有更多的堆栈跟踪线

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

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

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


有人能建议我去哪里看吗?

服务器需要SSL套接字。感谢响应者。

证明服务器需要SSL套接字。感谢响应者。

如果您在尝试代码时运行,网络流量会是什么样子?一个不相关的想法:在接近尾声时,你得到了一个不必要的
新字符串(result)
。最终你应该在最初编写的字符串之间写新行或某种分隔符。在任何情况下,防火墙都可能会阻止您的连接。您应该尝试并检查是否可以ping所需的服务器,以及是否可以在所需的端口建立控制台连接,以确保问题不在网络配置本身。希望这有帮助。@serrano-这对我的问题没有影响。没有任何东西可以到达服务器。正如我所说的,我不仅可以ping它(并且确实如此),而且在同一台机器上运行的另一个程序也可以到达服务器。真奇怪。在你看到它之后,套接字上的isBound()、isClosed()、isConnected()是什么?嗯,我个人会在套接字输出流上一次写入一个字节。(我假设您已四次检查transactionString等是否正确)。可能存在字符编码问题。否则我就有点不知所措了,对不起。如果您在尝试代码时运行,网络流量会是什么样子?一个不相关的想法:在接近尾声时,你得到了一个不必要的
新字符串(result)
。最终你应该在最初编写的字符串之间写新行或某种分隔符。在任何情况下,防火墙都可能会阻止您的连接。您应该尝试并检查是否可以ping所需的服务器,以及是否可以在所需的端口建立控制台连接,以确保问题不在网络配置本身。希望这有帮助。@serrano-这对我的问题没有影响。没有任何东西可以到达服务器。正如我所说的,我不仅可以ping它(并且确实如此),而且在同一台机器上运行的另一个程序也可以到达服务器。真奇怪。在你看到它之后,套接字上的isBound()、isClosed()、isConnected()是什么?嗯,我个人会在套接字输出流上一次写入一个字节。(我假设您已四次检查transactionString等是否正确)。可能存在字符编码问题。否则我就有点不知所措了,对不起。你至少应该告诉我你是如何调试这个问题的。Stackoverflow不是另一个论坛。您的经验可以帮助其他用户诊断相同的问题。我意识到其他服务器需要SSL套接字。我的另一个代码是使用SSL套接字,我应该记得服务器需要SSL。这并不是真正的调试问题,尽管Sharkwire告诉我接收IP确实收到了一些东西。但我不知道该如何阅读它告诉我的其他内容。恐怕这种经验对其他人调试任何东西都没有多大帮助。你至少应该告诉我你是如何调试这个问题的。Stackoverflow不是另一个论坛。您的经验可以帮助其他用户诊断相同的问题。我意识到其他服务器需要SSL套接字。我的另一个代码是使用SSL套接字,我应该记得服务器需要SSL。这并不是真正的调试问题,尽管Sharkwire告诉我接收IP确实收到了一些东西。但我不知道该如何阅读它告诉我的其他内容。恐怕没有多少经验可以帮助其他人调试任何东西。