【发布时间】:2016-06-12 17:52:31
【问题描述】:
我需要从 windows java 服务器向 linux c++ 客户端发送一个字符串,反之亦然,但我编写的代码不起作用,我不知道为什么:
Java 服务器 Windows 上的代码发送字符串:
for(int i=0;i<message.length;i++)
{
message[i]=Byte.parseByte(num_cartella);
}
sendData(message,client);
Java 服务器代码在 Windows 上接收数据:
client = server.accept();
InputStream ic = client.getInputStream();
BufferedReader dic = new BufferedReader( new InputStreamReader(ic) );
String id_scelta=String.valueOf(dic.readLine());
C++ 客户端代码在 Linux 上发送数据:
if( send(sock , nCartella,(unsigned)strlen(nCartella), 0) < 0)
{
cout <<"Invio fallito"<<endl;
return 1;
}
cout << "Messaggio inviato"<<endl;
C++ 客户端Linux 上的代码接收数据:
if( recv(sock, server_reply , (unsigned)strlen(server_reply) , 0) < 0)
{
cout <<"Ricezione fallita"<<endl;
return 1;
}
cout <<"Risposta server:";
cout <<server_reply;
为什么它不起作用?套接字将成功创建,但客户端和服务器不发送和接收数据,我不知道代码的错误部分是什么
【问题讨论】:
-
您是否使用通用字符编码发送和接收?可能不是。您应该更改代码以在所有 4 种情况下显式使用 UTF-8,例如
new InputStreamReader(ic, "UTF-8")在第二种情况下。 -
nCartella是如何定义的?server_reply?我们不知道strlen(server_reply)的结果是什么。另外,当您说“不起作用”时,这到底是什么意思?没有运行时错误,但您没有得到数据?有错误,即您的示例中的cout行显示出现故障? -
你有 MCVE 吗?可能有很多原因。服务器是否接受了客户端并绑定了客户端?我会说 Java 服务器在最后接受带有 CRLF 的字符串,而客户端发送的字符串的
n字节不一定以 CRLF 结尾,所以这也可能导致问题。 -
案例 #1 不好。将
num_cartella分配给message数组中的所有 个位置不会发送字符串的值。
标签: java c++ linux windows sockets