TCP を使用してファイルを送信する送信アプリケーションがあります。これらのファイルには 1 つのメッセージが含まれる場合もあれば、複数のメッセージが含まれる場合もあります。残念ながら、送信アプリケーションのコードにアクセスできません。
これらのメッセージを受信するために、レガシー コードの編集に取り組んでいます。単一のメッセージが送信されたときに、レガシーアプリケーションがファイルを受け入れるようにすることができました。ただし、メッセージを 1 つ受信した後でソケットを切断するため、Sender は切断エラーを返します。
別のメッセージがあるかどうかを判断するのに役立つ小さなプロセスを書きました。それが機能する場合は、コードに組み込むつもりでしたが、結果はまちまちでした:
Dim check(1) As Byte
If (handler.Receive(check, SocketFlags.Peek) > 0) Then
Dim bytesRec As Integer
ReDim bytes(1024)
bytesRec = handler.Receive(bytes)
End If
送信されている別のメッセージがある場合、これはそれを検出します。ただし、ファイルにメッセージが 1 つしか含まれていない場合は、別のファイルを送信するまで受信がロックされ、それが受け入れられます。
ストリームが空の場合にロックされない保留中の別のメッセージがあるかどうかを確認する方法はありますか?
メッセージを受け入れるためのすべてのコードは投稿しませんが、これは従来のネズミの巣であるため、一般的な考え方は次のとおりです。
s2 = CType(ar.AsyncState, Socket)
handler = s2.EndAccept(ar)
bytes = New Byte(1024) {}
Dim bytesRec As Integer = handler.Receive(bytes)
' Send Ack/Nak.
numAckBytesSent = handler.Send(myByte)
よろしくお願いいたします。