none
SocketとNetworkStream RRS feed

  • 質問

  • はじめまして。

    さっそくですが、
    現在、TCP/IP通信で悩んでおります。

    Socket.Send メソッド

    Dim instance As Socket
    Dim buffer As Byte()
    Dim returnValue As Integer

    returnValue = instance.Send(buffer)

    は上記のように正常に送信されたバイト数を returnValueで受け取る事が出来ますが、

    NetworkStream.Write メソッド

    Dim instance As NetworkStream
    Dim buffer As Byte()
    Dim offset As Integer
    Dim size As Integer

    instance.Write(buffer, offset, size)

    では正常に送信されたバイト数を受け取る術はないのでしょうか?
    TcpListener/TcpClient/NetworkStreamである程度作ってしまったので、今からSocket変えるのは・・・・・・
    って状態なんす。

    後者のやり方で、正常に送信されたバイト数が分かる方法があれば、教えてください。
    よろしくお願いします。
    2009年5月28日 7:51

回答

  • 「正常に」の基準がわかりませんが、送信側でわかる範囲で正常に送信完了した時点でWrite()メソッドが戻ってきます。何らかの失敗があった場合は必ず例外になります。
    NetworkStream.Writeメソッド
    Writeメソッドは、要求されたバイト数が送信されるか、SocketExceptionがスローされるまでブロックします。
    とあるのを根拠としてあげておきますが、不安でしたら.NET Frameworkのソースコードをお読みください。
    ちなみにSocket.Send()メソッドに送信バイト数の戻り値があるのは、non-blocking modeのためです。
    2009年5月28日 9:27

すべての返信

  • 「正常に」の基準がわかりませんが、送信側でわかる範囲で正常に送信完了した時点でWrite()メソッドが戻ってきます。何らかの失敗があった場合は必ず例外になります。
    NetworkStream.Writeメソッド
    Writeメソッドは、要求されたバイト数が送信されるか、SocketExceptionがスローされるまでブロックします。
    とあるのを根拠としてあげておきますが、不安でしたら.NET Frameworkのソースコードをお読みください。
    ちなみにSocket.Send()メソッドに送信バイト数の戻り値があるのは、non-blocking modeのためです。
    2009年5月28日 9:27
  • どうも有難うございます。

    IOExceptionって例外でCatchするかな?と思ってたのですが、
    サーバー・クライアントとも同じPCでテストしていると、

    NetworkStream.Write でブレイク貼って、受け側のアプリを落としてから実行しても例外が発生しなかったので投稿したのですが、
    サーバー・クライアントを別々のPCで行ったところ、IOExceptionの例外をCatchしました。

    有難うございました。
    2009年5月28日 10:11