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