我已经实现了一个c++服务器在linux下运行,从Android客户端接收字符串。连接成功建立,字符串也成功接收(我从接收的字节数中知道!)但是,我不能一次性显示消息,我需要访问Char数组来显示每个字符。
数据是在Android上使用以下行发送的:
dataOutputStream.writeUTF(StringToSent);
这是以下服务器的代码:
char receivedBuff[1025];
Connection = accept(listenfd, (struct sockaddr*)NULL, NULL);
cout << "Connection accepted \n";
numOfBytes = read(Connection,receivedBuff,sizeof(receivedBuff));
if (numb < 0)
printf("ERROR reading from socket");
printf("%s\n",receivedBuff);
当我试图使用下面的行显示接收到的缓冲区时,什么也没有得到:
cout << receivedBuff << Lendl;
不过,我可以像下面这一行那样一个一个的给它,但是它很乱!
cout << receivedBuff [0] << receivedBuff[1] << receivedBuff[2] << endl;
我试图将char数组转换为string,但它不起作用。有什么建议吗?
***********最后一次更新解决方案***********
安卓方面:
PrintStream ps = null;
ps = new PrintStream(socketw.getOutputStream());
ps.println(MessageToSent +'\0');
服务器端:
numOfBytes = read(Connection,receivedBuff,sizeof(receivedBuff));
if (numb < 0)
printf("ERROR reading from socket");
printf("%s done %d",receivedBuff, numOfBytes);
***********最后一次更新解决方案***********
最佳答案
DataOutputStream.writeUTF写入一个16位的长度,后跟该数量的类似UTF-8的字节。printf
打印以NUL结尾的C字符串。
两者不兼容。具体来说,对于小于256字节的字符串,由writeUTF
写入的第一个字节是NUL,从而产生长度为0的C字符串,如您所见。
由您决定一个通用协议,并在客户端和服务器端实现它。一个简单的例子是将字符串作为UTF-8编码的数据以行馈送结尾:您可以用Java中的AA>和C++中的“AA>”这样做。