我需要从Windows的Java服务器发送一个string到一个Linux的C + +客户端,反之亦然,但我写的代码,不起作用,我不知道为什么:
Java服务器 Windows 上的代码发送一个string :
for(int i=0;i<message.length;i++) { message[i]=Byte.parseByte(num_cartella); } sendData(message,client);
Windows 上的 Java服务器代码接收数据 :
client = server.accept(); InputStream ic = client.getInputStream(); BufferedReader dic = new BufferedReader( new InputStreamReader(ic) ); String id_scelta=String.valueOf(dic.readLine());
Linux上的C ++客户端代码发送数据 :
if( send(sock , nCartella,(unsigned)strlen(nCartella), 0) < 0) { cout <<"Invio fallito"<<endl; return 1; } cout << "Messaggio inviato"<<endl;
在Linux 上接收数据的 C ++客户端代码:
if( recv(sock, server_reply , (unsigned)strlen(server_reply) , 0) < 0) { cout <<"Ricezione fallita"<<endl; return 1; } cout <<"Risposta server:"; cout <<server_reply;
为什么它不起作用? 套接字将创build成功,但客户端和服务器不发送和接收数据,我不知道什么是错误的代码部分
你在数千人面前同样面临同样的问题。 其中两个,其实。
第一个问题是,当字符串是这样发送的时候,其他人不知道字符串的长度是多少! 所以你需要指出它,常用的技术是在实际字符串之前发送字符串大小。 当这样做的时候,对于字节序来说,Java是大端的,变化是,你的另一端是小端。
第二个问题是,你不能希望通过一个单一的recv
命令一次接收所有的东西。 你必须得到一个循环,直到你读完所有的东西。