如何从java服务器向C ++客户端发送字符串?

时间:2016-02-29 15:53:11

标签: java c++ linux windows sockets

我需要从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;

为什么它不起作用?套接字将成功创建,但客户端和服务器不会发送和接收数据,我不知道代码的错误部分

1 个答案:

答案 0 :(得分:3)

在你之前,你在成千上万的问题上遇到了绊脚石。其中两个,实际上。

第一个问题是,当字符串以这种方式发送时,另一个人不知道字符串的长度是多少!所以你需要指出它,常见的技术是在实际字符串之前发送字符串大小。在这样做的时候,对于endianness来说是什么 - Java是big-endian,而且变化是,你的另一面是小端。

第二个问题是,您无法希望通过单个recv命令一次性接收所有内容。你必须循环接收,直到你读完所有的东西。