我需要从windows java服务器发送一个字符串到linux c ++客户端,反之亦然,但我写的代码不起作用,我不知道原因:
Java服务器 Windows上的代码发送字符串:
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;
为什么它不起作用?套接字将成功创建,但客户端和服务器不会发送和接收数据,我不知道代码的错误部分
答案 0 :(得分:3)
在你之前,你在成千上万的问题上遇到了绊脚石。其中两个,实际上。
第一个问题是,当字符串以这种方式发送时,另一个人不知道字符串的长度是多少!所以你需要指出它,常见的技术是在实际字符串之前发送字符串大小。在这样做的时候,对于endianness来说是什么 - Java是big-endian,而且变化是,你的另一面是小端。
第二个问题是,您无法希望通过单个recv
命令一次性接收所有内容。你必须循环接收,直到你读完所有的东西。