各位,现在用java和c实现socket编程,服务端用Java,客户端使用C实现。在客户端发送给服务端消息时,服务端BufferedReader的readLine()方法读取,第一次可以正确读出消息,并通过PrintWriter的pw.print("123\n");返回给客户端,客户端也能正确收到。问题是当客户端第二次(第三次,第四次也是这样)发送消息时,服务端再用readLine()方法读取时,总是在消息前面出现几个'\u0000',不知道什么原因,清各位高手指点一下。客户端的发送程序应该没有什么问题,在c的数组后加了'\n'。我怀疑是不是C和java的readLine()方法之间有一些问题,但是又没有经验,麻烦各位指教,项目很急!
这个跟协议有关,跟C/C++还是Java没有关系
C++的客户端和Java的服务器端都能通信的。
可能某个字符串后面跟了N个\0\0\0\0,因此第二次readLine的时候就把前面的0给读进来了
应该是c客户端写入字符串的代码有问题
不是N个\0,一个\0就够了,对java来讲,就要转成UNICODE的\u0000
\u0000在Unicode中应该是空格,也许是发送串自己填充的,联想到C/C++的字符串char*都是用\0结束的,这样也许就能理解为什么了
所以你要判断文件是否有结束,如果结束就不进行读取c++中的是: while(!input.eof()){
input.readline();
}java :
while(fileLine=file.ReadLine())!=nul)
c 则是: while(!feof(input)){
}