У меня есть сервер, написанный на C/C++, а клиент находится на Java, который работает на android.Socket Получение неправильных данных
Сервер выглядит как сервер
C++
#define ETH_DATA_LENGTH 25
bzero(buf,ETH_DATA_LENGTH);
rd=read(newsockfd,buf,ETH_DATA_LENGTH);
if(rd>0){
printf("received %s\n", buf);
char cmd[ETH_DATA_LENGTH]={0};
sprintf(cmd,"%s",buf);
//setCommand(cmd);
}
Андроида клиент посылает пакет данных формата 5_11_14_, 5_11_15_, 5_11_16_,etc...
и сервер получает данные правильно, если есть задержка в стороне клиента с в каждом пакет. Но когда клиент постоянно посылать я получаю некоторый дополнительный характер и выглядят как
received 5_11_9_
received 5_11_10_
5_11_11_
5_11_12�ڳ
received _
received 5_11_13_
А на андроид стороне я посылаю данные как
Java клиент
PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(clientsocket.getOutputStream())),true);
out.println(str);
Любая идея почему это происходит?
Заранее спасибо ....
Вы не прекратили свой буфер перед тем, как использовать его в виде строки, так как ваше чтение может перезаписать последний ноль. Кроме того, вы не можете ожидать, что данные выйдут из стороны приема TCP обязательно в тех же размерах, что и на стороне передачи. –
25 слишком мал, длина «5_11_10_ \ r5_11_11_ \ r5_11_12» равна 25. Вам нужно изменить строку на 'rd = read (newsockfd, buf, ETH_DATA_LENGTH - 1);' – ZijingWu
@ ZijingWu На самом деле клиент отправляет данные, такие как 5_11_14_, а затем 5_11_15_ и т. Д. – Haris