2012-01-10 7 views
2

ネットワークコードの一部を改善しようとしていますが、ここではSocket.Sendを使用する必要があります。Socket.Sendベストプラクティス

しかし、MSDNは、再試行を処理するのは開発者自身の責任であり、Socket.Sendメソッドはすべてのデータを単一の要求(バッファサイズに依存)で送信する必要はないため、次のループ:

try 
{ 
    int timeout = TimeSpan.FromSeconds(10).Milliseconds; 
    int waitTime = TimeSpan.FromMilliseconds(30).Milliseconds; 

    Socket socket = tcpClient.Client; 
    socket.SendTimeout = timeout ; 

    int offset = 0; 

    while (offset != data.Length) 
    { 
     if (socket.Poll(waitTime , SelectMode.SelectWrite)) 
     { 
      offset += socket.Send(data, offset, data.Length - offset, SocketFlags.None); 
     } 
    } 
} 
catch (SocketException) 
{ 
    tcpClient.Close(); 
} 

は、しかし、私はそれがゼロに基づいているとして、それはおそらくにつながる、オフセットに関する不確実だが、ここですべてのループ上の単一バイトが欠落したオフセット、または私が間違っていますか?

また、ここで気になるその他のベストプラクティスはありますか?

答えて

0

MSDNの記事は述べています:

戻り値型: ソケットに送信されたバイトの可能System.Int32数を。

だから私はそれについて心配しません。ベストプラクティスのための唯一のアドバイスは、WCFの使用を検討することです。.NETのソケットよりもはるかに使いやすく、信頼性の高いソケットです。

+0

WCFはエレクトロニクスとうまく動作しません;-) –

+0

ああ:)まあ、あなたのコードは正常に動作するはずです。私はオフセット変数をインクリメントすることで過去に似たようなことをしてきました:) – NibblyPig