2012-02-23 17 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

+0

コードを見ることなく、私たちの誰も手がかりを得ることができない、または手掛かりを持つことはないとかなり公平に推測されます。 –

+0

あなたが表示したコードは問題ありません。あなたのコードの残りの部分はうまくいきません。たとえば、どのように印刷しますか? 'std :: string(temp、size)'を表示してください。 –

答えて

7

それが本当に送信していないので、あなたは、読み取り後にTEMPで\ 0を失われます

おそらく受信を少し変更する必要があります:

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

Btwの場合、QTcpSocket :: readAll()を使用する方が良いでしょう。

1

私はこのCStringクラスを知らないが、私はここで2個のバグを参照してください。

  • GetLength()は終端のヌルが含まれていますか?そうでなければ、あなたのcharバッファは必要なサイズよりも1バイト小さくなり、バッファの最後の後にはstrcpyのメモリが壊れてしまいます。
  • strlen(pMsg)は、szDest以外の長さです。これは恐らく問題の直接の原因です。

charバッファが不要であるように思われる:なぜあなただ​​け

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

をしませんか?