2012-02-14 11 views
0

Socketクラスを使用して、Send()メソッドを使用してテキストメッセージをリモートサーバーに送信しています。Socketクラスが送信時にテキストを破棄します

私はを送信していますテキストには改行を持っていない:

"The|string|that|is|being|sent|" 

が、リモートサーバが

"The|st" 
"" 
"ring|t" 
"" 
"hat|is" 
"" 
"|being" 
"" 
"|sent|" 

としてそれを受け取り、これを防ぐことができますSocketクラスの設定はありますか?

+2

コードを見ることなく、あなたのバッファーが小さすぎると推測しています。要求と応答のサンプルコードを投稿できますか? –

答えて

2

これは通常の動作です(使用していると仮定しています)。パケットが断片化する方法を実際に制御することはできず、パケットが同じ順序で配信されることが保証されます。

通常、アプリケーションは1つのメッセージが送信されたことを示す終了文字(たとえば改行文字)を送信し、新しいデータは次のメッセージに属します。

空の文字列がどこから得られるのでしょうか?0バイトのメッセージは、相手側が接続を終了したいことを示しています。

+0

文字列が一度に送信されるときに空の文字列がどこから来るかわかりません。 – Asher

+0

リモートサーバー上で実行されているサービスに問題があったことが分かります。テキストを切り詰めました。 TCPではない – Asher

1

短い答えはノーです。

Socketクラスを使用している場合は、非同期に送信する場合は、送信用のスレッドと受信用の送信用バッファを実装する必要があります。

メッセージの開始文字列と終了文字シーケンス、または既知のメッセージサイズの開始シーケンスを定義する必要があります。

TCPがメッセージを分割するのは当然ですが、データは常に正しい順序で到着します。