что может быть причиной моего сообщения с дополнительными символами?

Я пытаюсь создать программу, которая отправляет информацию (набор символов) в другую программу (клиент / сервер) с помощью winsock для моего школьного проекта.

сообщение, которое я отправляю, получено на другой стороне, но с дополнительными символами в конце. И.Е. если я хочу послать «привет», я получу «hallod3» или несколько случайных символов.

P.S: сообщение отправлено с клиента на сервер

вот мой код на сервере:

 char recvbuf[DEFAULT_BUFLEN];
int recvbuflen = DEFAULT_BUFLEN;

do {

iResult = recv(ClientSocket, recvbuf, recvbuflen, 0);
if (iResult > 0) {
ShowMessage(recvbuf);
}

else if (iResult == 0)
ShowMessage("Connection closing...\n");
else  {
ShowMessage("recv failed with error: %d\n", WSAGetLastError());
closesocket(ClientSocket);
WSACleanup();
ShowMessage("send failed");
}
} while (iResult > 0);

и вот клиент:

 char sendbuf[DEFAULT_BUFLEN];

iResult = send( ConnectSocket, sendbuf, (int)strlen(sendbuf), 0 );
if (iResult == SOCKET_ERROR) {
ShowMessage("send failed with error: %d\n", WSAGetLastError());
closesocket(ConnectSocket);
WSACleanup();
ShowMessage("send failed");
}

Определяется DEFAULT_BUFLEN (длина сообщения), ShowMessage () — это функция из компонента VCL (я использую Borland C ++ Builder), которая принимает строку и отображает ее.

П.С .: Я позаботился о строке ‘sendbuf’ в клиенте, и в ней нет лишних символов, я даже добавляю ‘\ 0’ в конце строки.

в чем может быть проблема здесь?

1

Решение

Он не «получен с дополнительными символами». Просто вы игнорируете iResult при отображении буфера приема. Это справедливо только для байтов iResult, но не для всего.

2

Другие решения

число, возвращаемое strlen, не включает символ ‘\ 0’, поэтому символ ‘\ 0’ не отправляется.
Кроме того, вам не гарантировано получение всего сообщения за один вызов recv.

1

По вопросам рекламы [email protected]