以下は、サーバーからのデータの非同期受信のためにクライアント側でソケットプログラミングで使用するコールバックメソッドです:-
Public Sub Connect()
m_clientSocket = New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
m_clientSocket.Connect(Ip, PortNo)
If (m_clientSocket.Connected) Then
m_clientSocket.BeginReceive(dataBuffer, 0,dataBuffer.Length SocketFlags.None, New AsyncCallback(AddressOf OnDataReceived), m_clientSocket) //here I connect the callback OnDataRecieved
End If
End Sub
Public Sub OnDataRecieved(ByVal async As IAsyncResult)
Dim Recieved_Size As Integer = m_clientSocket.EndReceive(async)
' rest of the code ...
End Sub
「OnDataReceived メソッド」内で「Received_Size」= 0 の場合、ソケットが切断されたと結論付けるべきでしょうか? そうでない場合、どのような場合に Received_Size = 0 にする必要がありますか?
私が尋ねている理由は、接続されたサーバーが切断されるたびに「OnDataReceived」メソッドが呼び出され、結果の「Received_Size」が = 0 になるということです。ただし、接続時ではなく、ソケットに対して読み取るデータがある場合にのみ呼び出す必要があります。 /切断が発生しますよね?
私の疑問を明確にしてくれる人に本当に感謝します。