DOBON.NET DOBON.NETプログラミング掲示板過去ログ

非同期通信について

環境/言語:[win2000 Farmework1.1]
分類:[.NET]

現在非同期通信のソフト(listener)を作成中です。
以下のソースのように作成しているのですが、途中で通信ポートを
切断すると、エラーが発生してしまいます。受信を行ったあと、切断すれば
エラーは発生しません。
いろいろ調べたのですが、分かりませんでした。解決方法をご存知の方がみえましたらご教授願います。
--------------------------------------------------------------
Private Class StateObject
Public workSocket As Socket = Nothing
Public Const BufferSize As Integer = 1024
Public Buffer(BufferSize) As Byte
Public sb As New StringBuilder
End Class

Private ipHostInfo As IPHostEntry
Private ipAddress As IPAddress
Private remoteEP As IPEndPoint

private listener As Socket

Public Sub subRecv()

ipHostInfo = Dns.Resolve(Dns.GetHostName)
ipAddress = ipHostInfo.AddressList(0)
remoteEP = New IPEndPoint(ipAddress, mintPortNum)

listener = New Socket(AddressFamily.InterNetwork,SocketType.Dgram,ProtocolType.Udp)

Try
listener.Bind(remoteEP)

Dim state As New StateObject

state.workSocket = listener
listener.BeginReceive(state.Buffer, 0, StateObject.BufferSize, 0, _
New AsyncCallback(AddressOf ReadCallBack), state)
Catch ex As Exception

End Try

End Sub

Private Sub ReadCallBack(ByVal ar As IAsyncResult)

Try
Dim state As StateObject = CType(ar.AsyncState, StateObject)
Dim handler As Socket = state.workSocket

Dim bytesRead As Integer = handler.EndReceive(ar)

If bytesRead > 0 Then
' There might be more data, so store the data received so far.
state.sb.Append(Encoding.ASCII.GetString(state.Buffer, 0, _
bytesRead))

'// 受信処理 //


End If
Catch ex As Exception
'// 途中で通信を強制切断するとエラーが発生!! //
End Try

End Sub
■No6138に返信(KENさんの記事)

> 途中で通信ポートを切断すると、エラーが発生してしまいます。

エラーと言っているのが「例外」なら良いことではないのですか?
切断したら受信できないのですから、発生して然りなのではないのでしょうか?
逆に発生しなくしたら、不都合が起きそうな気がするのですが...


> いろいろ調べたのですが、分かりませんでした。解決方法をご存知の方がみえましたらご教授願います。

切断しているのに受信する術は、ないのではないでしょうか?

# 私が文章の意味を曲解していなければの話です。
■No6139に返信(java.lang.Nullpoさんの記事)
> ■No6138に返信(KENさんの記事)
>
>>途中で通信ポートを切断すると、エラーが発生してしまいます。
>
> エラーと言っているのが「例外」なら良いことではないのですか?
> 切断したら受信できないのですから、発生して然りなのではないのでしょうか?
> 逆に発生しなくしたら、不都合が起きそうな気がするのですが...
>
>
>>いろいろ調べたのですが、分かりませんでした。解決方法をご存知の方がみえましたらご教授願います。
>
> 切断しているのに受信する術は、ないのではないでしょうか?
>
> # 私が文章の意味を曲解していなければの話です。

KENさん、java.lang.Nullpoさん、こんにちは。
当然、java.lang.Nullpoさんがおっしゃる通り、途中で強制切断を行えば当然エラーが発生しますよ。
Catchの部分をBreakしたら、エラーの理由がわかるはずです。

DOBON.NET | プログラミング道 | プログラミング掲示板