当前位置: 首页 > 知识库问答 >
问题:

套接字通信未到达服务器

白嘉志
2023-03-14

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

    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服务器所获得的相同。

有人能建议我还可以去哪里吗?

共有1个答案

甄德寿
2023-03-14

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

 类似资料:
  • 我想找个人来澄清一个我相信我有的误解。我在读Java上的套接字编程,并不真正理解事情的实际流程是什么。以下是我对以下场景的两种可能的解释。 创建套接字实例 null 服务器接受客户端之后的连接会是这样的吗?(客户端与服务器创建的套接字通信,而不是与服务器套接字通信) 或者图表会像这样吗?(客户端通过ServerSocket与服务器保持通信。服务器通过接受连接时创建的套接字进行通信。)

  • 我对套接字有点陌生,我正在尝试编写一个程序,在这个程序中,我基本上可以从客户端程序向服务器程序发送一些简单的请求。现在我只想在客户端有1或2个选项供用户选择。例如,如果用户在客户端选择“选项1”,那么服务器会返回一条消息“您选择选项1”,以此类推,但我不知道如何读取服务器上从客户端发送的输入。 客户代码: 服务器代码: 我需要在Clinet中使用两个不同的BufferedReader吗?一个用于用

  • 问题内容: 我试图用没有gui的服务器连接带有gui的客户端。连接已完成,但我看不到这两个应用程序之间的任何消息。(我应该在客户端中找到SERVER HERE,在服务器中找到CLIENT HERE) 客户端连接代码: (输入和输出在此客户端类扩展到的GUI类中定义。定义为“受保护的BufferedReader输入;受保护的PrintWriter输出;”) 另外,服务器代码: 连接似乎还可以,所以我

  • 我正在尝试连接一个带有gui的客户端和一个没有gui的服务器。连接正在进行中,但我看不到这两个应用程序之间的任何消息。(我应该将服务器放在客户端中,而将客户端放在服务器中) 客户端连接代码: PS:我也在服务器中尝试了PrintWriter,也尝试了try catch in stream语句,问题仍然存在。

  • 我有这个代码可以在eclipse中与android Studio中的客户端通信服务器,我使用套接字,客户端向服务器发送消息,服务器读取该消息并确定一切正常,但当服务器向客户端发送消息时,客户端不强制任何东西;这是代码 还有这个 此代码是服务器代码的一部分,如果您需要客户端代码(Android Studio),请告诉我。 我需要帮助拜托

  • 问题内容: 错误2002(HY000):无法通过套接字’/var/run/mysqld/mysqld.sock’(2)连接到本地MySQL服务器 我尝试了在互联网上找到的所有内容,但是无法解决在Ubuntu 11.04上出现的问题。 我尝试了这些事情: 使用手动启动mysqld 使用启动mysqld 检查它是否正在使用并获得结果 在手动创建文件 授予用户权限 试图删除并重新安装,但仍然无法正常工作