2011-07-07 18 views
1

私は現在サーバー/クライアントで作業しており、基本はほぼ完了しています。しかし、私はテストクライアントプログラムを閉じて開いた後にデータを送信することに問題があります。クライアントは切断前にすべてのデータを送信していません

これは私の切断方法がどのように見えるかです:

public void Disconnect() 
    { 
     if (m_clientSocket != null) 
     { 
      m_clientSocket.Shutdown(SocketShutdown.Receive); 
     } 
    } 

とテストデータは次のようになります。

Client cl = new Client(888, "127.0.0.1"); 
     cl.Connect(null); 
     cl.DataArrived += MyListenerMethod; 
     cl.Disconnect(); 

     cl.Connect("hello"); 
     cl.SendData("hello2"); 

今の問題は、それが時には「hello」を送ると「hello2」になるでクライアントプログラムを閉じて繰り返し起動すると、ちょうど "こんにちは"と表示されることがあります。 私はこれが設計通りに動作していると確信していますが、プログラムが終了する前にすべてのデータを送信したいのですが、これを達成するために遅延や何かを使わなければならないと思います。私はこれが些細な質問のように思えるかもしれないが、これが可能かどうかは疑問だ。

答えて

0

送信するデータはバッファリングされていますが、シャットダウン時にはソケットがフラッシュされていません。その結果、あまりにも早くソケットをシャットダウンしようとすると、バッファされたデータは送信されません。

このブログの記事によると、あなたはNetworkStreamクラスでもっと運があるかもしれません。

(代わりにWCFまたは.NET Remotingを使用して、それがすべてのこの厄介なものを扱う持っている)

+0

だから問題は、私はNetworkStreamのではなく、古き良き文字列を使用しているということですリレーメッセージ? – Siemsen

+0

@Siemsen問題は、ソケットがフラッシュされていないということです。私の推測では 'm_clientSocket'は' Socket'のインスタンスですが、ドキュメンテーションのソケットをフラッシュする方法に関する情報は見つかりませんでした。 – Justin

関連する問題