2012-02-23 70 views
0

我有我的套接字通信幾乎工作。唯一不確定的是爲什麼我在消息結尾處得到了一些垃圾值。我發送的第一條消息最後包含一些額外的字符,並且之後的每條消息都如預期的那樣...有沒有人有任何見解,爲什麼會發生這種情況?C++ TCP套接字垃圾值

發送:

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); 
+1

顯示一些代碼? – cnicutar 2012-02-23 20:07:13

+0

這是一個相當公平的猜測,沒有看到一些代碼,我們誰也不會有任何線索。 – 2012-02-23 20:07:47

+0

你顯示的代碼很好。不好的是你的代碼的其餘部分。例如,你如何打印它?嘗試打印'std :: string(temp,size)'。 – 2012-02-23 20:15:52

回答

7

你會被丟失在讀取後您的臨時的\ 0,因爲它不是真正的傳輸(並且可能不應該)

您可能需要更改接收一點點:

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

順便說一句,你會更好用QTcpSocket :: readAll()在這個小剪輯。

1

我不知道這CString類,但我看到了兩個錯誤的位置:

  • 是否GetLength()包括終止NUL?如果不是,你的緩衝區比它需要的小一個字節,而strcpy在緩衝區結束之後會破壞內存。
  • strlen(pMsg)szDest以外的東西的長度。這可能是你的問題的直接原因。

char緩衝似乎是不必要的:爲什麼你不只是做

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