【问题标题】:server in Java, client in C - cannot get the dataJava中的服务器,C中的客户端-无法获取数据
【发布时间】:2012-01-19 17:29:32
【问题描述】:

我正在为 tcp-ip 服务器客户端编写代码...我面临的问题是 :: 我的服务器在 Java 中并正在侦听一个端口,如果它找到任何东西,它就会打印它找到的东西。

我有一个 Java 客户端和一个 C 客户端。当我使用我的 Java 客户端并发送字符串“hello server”时 - 服务器发现并打印该字符串,但是当 C 客户端使用 winsock.h 的“发送”发送它时,Java 服务器在行 :: (I已使用 Buffereader 和 readline 从 Java 服务器中的 tcp-ip 端口获取数据)

        commandFromPortal = inFromClient.readLine();

错误是::

           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)
at org.snmp4j.NOCAlarmManager.Clientnew.run

我该怎么办???有什么建议吗??

【问题讨论】:

  • 在这种情况下提供更多关于 C 客户端的信息可能会有所帮助,至少打开套接字并发送数据。
  • 发布相关代码可能会有所帮助。是缓冲问题吗?确保以换行符结束发送的字符串,然后尝试刷新。
  • 从您的服务器发布套接字读取代码。
  • Java 以 UTF 而非 ascii 存储字符串。尝试在服务器上读取原始字节,或从 C 客户端发送 UTF 字符串。
  • @Kevin :: 我在从 C 客户端发送的 char 数组的末尾添加了一个换行符......它工作了......谢谢......但是不添加是否有可能字符串末尾的 \n ?我应该改变我的java服务器的bufferreader吗???

标签: java c sockets tcp ip


【解决方案1】:

听起来,当您写入套接字时,套接字正在缓冲,并且在您关闭套接字之前排队的数据没有被刷新(发送)(您正在正确地关闭它,对吗?)。添加换行符 (\n) 时它起作用的事实似乎证实了这一点。因此,您必须在关闭它之前刷新套接字上的缓冲区。我不使用winsocks,但我认为您应该从this website 调用shutdown(sock,SD_SEND)(如果这不起作用,请查看winsock 文档以了解如何刷新套接字缓冲区)。

【讨论】:

    【解决方案2】:

    您需要使用中间件来引入透明度。

    中间件框架旨在掩盖网络和硬件的异构性。大多数中间件框架还掩盖了操作系统或编程语言的异构性,或两者兼而有之。
    可以使用诸如 CORBA 之类的一些。

    【讨论】:

    • 不开玩笑......同时,还添加一个数据库 - 不能没有一个(或两个或三个)、一个管理系统和一些用于报告的 Web 框架。这样您将获得更高的透明度。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-23
    • 2016-05-20
    • 1970-01-01
    • 2013-08-16
    • 1970-01-01
    • 1970-01-01
    • 2014-04-08
    相关资源
    最近更新 更多