Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/361.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中的服务器,C中的客户端-无法获取数据_Java_C_Sockets_Tcp_Ip - Fatal编程技术网

Java中的服务器,C中的客户端-无法获取数据

Java中的服务器,C中的客户端-无法获取数据,java,c,sockets,tcp,ip,Java,C,Sockets,Tcp,Ip,我正在为tcp ip服务器客户端编写代码。。。我面临的问题是::我的服务器是Java的,正在侦听端口,如果它找到任何东西,它只打印它找到的东西 我有一个Java客户端和一个C客户端。当我使用Java客户机并发送字符串“hello server”时,服务器会找到并打印该字符串,但当C客户机使用winsock.h的“send”发送该字符串时,Java服务器会在以下行中给出错误::(我使用BufferReader和readline从Java服务器中的tcp ip端口获取数据) 错误是::

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

我有一个Java客户端和一个C客户端。当我使用Java客户机并发送字符串“hello server”时,服务器会找到并打印该字符串,但当C客户机使用winsock.h的“send”发送该字符串时,Java服务器会在以下行中给出错误::(我使用BufferReader和readline从Java服务器中的tcp ip端口获取数据)

错误是::

           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

我该怎么办???任何建议???

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

中间件框架旨在屏蔽网络和硬件的异构性。大多数中间件框架还掩盖了操作系统或编程语言的异构性,或两者兼而有之。

可以使用一些,比如CORBA。

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

提供有关C客户机的更多信息可能在这种情况下有所帮助,至少打开套接字并发送数据。发布相关代码可能会有所帮助。这是缓冲问题吗?确保以换行符结束发送的字符串,然后尝试刷新。发布从服务器读取代码的套接字。Java以UTF而不是ascii存储字符串。尝试在服务器上读取原始字节,或从C客户端发送UTF字符串。@Kevin::我在从C客户端发送的字符数组末尾添加了一个换行符。。。。它成功了。。。谢谢但是否可以不在字符串末尾添加\n?我应该更换java服务器的bufferreader吗???不是开玩笑的。。。同时,还要添加一个数据库——不能没有一个(或两个或三个),一个管理系统和一些用于报告的web框架。这样,您将获得更大的透明度。
           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