アウトライン =============================================================== 'メインスレッド svlThread.Start() '個別スレッドsvlThread lSocket.BeginAccept 'コールバックスレッド ServiceThread.Start() 'サービススレッド cSocket.BeginReceive 'コールバックスレッド SendBinaryFile(ByVal FileFullPathName As String) As Integer ===============================================================
SendBinaryFileはClass AAに有りこれは別途 as new で宣言してあります。
Public Class AA
'dSocketはSendBinaryFile呼び出しまでに確立しています。
Public Function SendBinaryFile(ByVal FileFullPathName As String) As Integer fsr = New FileStream(FileFullPathName, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.Read) fsbr = New BinaryReader(fsr)
Do Dim fbuffer_1() As Byte = fsbr.ReadBytes(BufferSize) If fbuffer_1.Length = 0 Then Exit Do '******これが途中で無反応******** dSocket.Send(fbuffer_1, fbuffer_1.Length, lags.None) '******************************** Loop
分類:[.NET]
作成中のサーバーアプリでSocket.Sendが反応しなくなり、エラーもTry Catch出来ず解決の糸口が見つからずに困っています。
アウトライン
===============================================================
'メインスレッド
svlThread.Start()
'個別スレッドsvlThread
lSocket.BeginAccept
'コールバックスレッド
ServiceThread.Start()
'サービススレッド
cSocket.BeginReceive
'コールバックスレッド
SendBinaryFile(ByVal FileFullPathName As String) As Integer
===============================================================
SendBinaryFileはClass AAに有りこれは別途 as new で宣言してあります。
Public Class AA
'dSocketはSendBinaryFile呼び出しまでに確立しています。
Public Function SendBinaryFile(ByVal FileFullPathName As String) As Integer
fsr = New FileStream(FileFullPathName, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.Read)
fsbr = New BinaryReader(fsr)
Do
Dim fbuffer_1() As Byte = fsbr.ReadBytes(BufferSize)
If fbuffer_1.Length = 0 Then Exit Do
'******これが途中で無反応********
dSocket.Send(fbuffer_1, fbuffer_1.Length, lags.None)
'********************************
Loop
dSocket.Close() : dSocket = Nothing
Return 1000'<----仮
End Function
End Class
===============================================================
送出量で 約30KB 送るとその後無反応になります。
無反応とは エラーが発生するでもなく、次のステップに移行するでもなく全く動きが無くなります。従ってクライアントは延々と待ち続けます。ループ回数を強制的に3とか4とかにすると前期 約30KB 分だけ正常に送られます。
このルーチンは元々非同期で組んでいましたが同じトラブルが生じ、原因を追い込んでいく内に同期ソケットでも同じと分かりました。
想像するに、ソケットバッファーの満杯が原因かな??とも思いますが、確認方法と解決策が分かりません。又上記ルーチンを確認の為シングルスレッド環境でテストした所問題なく作動しており、方や複雑なスレッド構造でありこれが原因かなとおもったりもします。
どなたか原因の確認・解決の糸口をご教授頂けませんでしょうか、よろしくお願いします。