[英]error while sending a String from C client to Java server
我从C客户端向Java服务器发送一个整数,它运行良好。 但是,当我尝试对得到的字符串执行相同的操作并且出错时,这是发送字符串的客户端代码
char clientString[30];
printf("String to send : \n");
if( send( to_server_socket, &clientString, sizeof( clientString ), 0 ) != sizeof( clientString ) )
{
printf( "socket write failed");
exit( -1 );
}
和读取的Java代码
DataInputStream din = new DataInputStream(socket.getInputStream());
String clientString=din.readUTF();
System.out.println(clientString);
错误
java.io.DataInputStream.readFully(DataInputStream.java:180)处的java.io.EOFException java.io.DataInputStream.readUTF(DataInputStream.java:547)处java.io.DataInputStream.readUTF(DataInputStream.java:592)在ServiceRequest.run(ServiceRequest.java:43)在java.util.concurrent.Executors $ RunnableAdapter.call(Executors.java:439)在java.util.concurrent.FutureTask $ Sync.innerRun(FutureTask.java:303)在java.util.concurrent.ThreadPoolExecutor $ Worker.runTask(ThreadPoolExecutor.java:895)上的java.util.concurrent.FutureTask.run(FutureTask.java:138)在java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor) java:918),位于java.lang.Thread.run(Thread.java:680)
编辑:我尝试使用din.readLine()
,我不再有错误,但是如果我在客户端上输入fffffff12,我会在服务器中得到fffffff12`?7E ^Ê?h
无论输入多长时间,您都将在clientString
数组中发送所有数据。 正确终止字符串,而仅发送例如strlen(clientString)
字节。
可能的问题在于,在客户端上您正在编写ASCII字符串,而在服务器端上您正在读取UTF,请尝试将数据读取为ASCII,并且如果可能的话,请提及发生的异常。 此方法可能引发两个异常:1- IO异常或2- EOF异常。
readUTF
不仅从套接字读取字节。 首先读取字符串的长度(作为16位整数),然后读取字符串。 问题是您发送的内容不是readUTF
成功运行所必需的。
正如Joachim Pileborg指出的那样,您还将发送clientString
的整个30个字节(包括未明确设置的所有剩余字节)。 您应该这样发送:
send(to_server_socket, clientString, strlen(clientString), 0);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.