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

Socket.Send が反応しない

環境/言語:[Windows XP NET Framework1.1]
分類:[.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 分だけ正常に送られます。

このルーチンは元々非同期で組んでいましたが同じトラブルが生じ、原因を追い込んでいく内に同期ソケットでも同じと分かりました。

想像するに、ソケットバッファーの満杯が原因かな??とも思いますが、確認方法と解決策が分かりません。又上記ルーチンを確認の為シングルスレッド環境でテストした所問題なく作動しており、方や複雑なスレッド構造でありこれが原因かなとおもったりもします。

どなたか原因の確認・解決の糸口をご教授頂けませんでしょうか、よろしくお願いします。
  • 題名: Re[1]: Socket.Send が反応しない
  • 著者: emigenn
  • 日時: 2005/02/14 22:57:16
  • ID: 9134
  • この記事の返信元:
  • この記事への返信:
    • (なし)
  • ツリーを表示
自己レスです。
その後いろいろ調べた所、やはりソケットのバッファーがフルに成っていたようです。

シングルスレッド環境でテストした時は対抗するサーバー・クライアント共自分で作ったもので中身も分かった物だった為問題も発生しなかったようです。
実際の環境ではクライアントは自分の作ったものではなかった為シーケンスにずれが有りクライアント側での取り込みがこちらの思っていた様な動きで取り込みがされずサーバー側に溜まってしまっていたようです。クライアントとの協調を見直した所、うまく作動する様になりました。
お騒がせしました、また宜しくお願いします。
解決済み!

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