我已经实现了一个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>”这样做。

10-07 20:05
查看更多