Значение мусора в сокете TCP C ++ - PullRequest
0 голосов
/ 24 февраля 2012

У меня довольно много работает мой сокет связи.Единственная вещь, в которой я не уверен, это то, почему я получаю некоторые значения мусора в конце моего сообщения.Первое сообщение, которое я отправляю, содержит несколько дополнительных символов в конце, и каждое сообщение после него соответствует ожидаемому ... Кто-нибудь знает, почему это происходит?

CString string = "TEST STRING TO SEND";
char* szDest;
szDest = new char[string.GetLength()];
strcpy(szDest,string);
m_pClientSocket->Send(szDest,strlen(pMsg));

Получите: (это использует Qt)

char* temp;
int size = tcpSocket->bytesAvailable();
temp = new char[size];
tcpSocket->read(temp,size);

Ответы [ 2 ]

7 голосов
/ 24 февраля 2012

Вы пропустите \ 0 в вашем временном файле после чтения, так как он не передается (и, вероятно, не должен быть)

Вам, вероятно, нужно немного изменить прием:

temp = new char[size + 1];
int realSize = tcpSocket->read(temp, size);
temp[realSize] = 0;

Кстати, вам лучше использовать QTcpSocket :: readAll () в этом небольшом фрагменте.

1 голос
/ 24 февраля 2012

Я не знаю этот CString класс, но я вижу здесь две ошибки:

  • Включает ли GetLength() завершающий NUL? Если нет, то ваш char буфер на один байт меньше необходимого, а strcpy забивает память после окончания буфера.
  • strlen(pMsg) - длина чего-то отличного от szDest. Вероятно, это является непосредственной причиной вашей проблемы.

Буфер char кажется ненужным: почему бы вам просто не сделать

CString string = "TEST STRING TO SEND";
m_pClientSocket->Send(string, string.GetLength());

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...