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

socket select、poll

  • 題名: socket select、poll
  • 著者: nagasaka
  • 日時: 2004/11/22 16:44:26
  • ID: 7588
  • この記事の返信元:
    • (なし)
  • この記事への返信:
  • ツリーを表示
環境/言語:[WINDOWS2000 framwork1.1]
分類:[.NET]

初心者のnagasakaといいます。VB2002 でウィンドアプリを作っています。
クライアントサーバーのチャットプログラムのようなものを作っています。サーバー側のブロックをしたくないのですが、非同期は難しそうで他の方法を教えてもらいました。
accept する前に、接続要求を関知する関数があるというので、試していますが、うまくいきません。
poll を使っていますが、最初だけ関知して、2回目以降、関知してくれません。
poll 後に、handler というソケットを作っているからだと思いますが、使い方が間違っているかと思います。C では、select を使う例を見せてもらいました。
他に、TCPLISTENER に、pending という関数も同じことなのでしょうか。参考にできるものをご存じでしたら、ご紹介ください。

-------------------------
aSocket.Bind(aIPEndpoint)
aSocket.Listen(1)

If aSocket.Poll(2000, SelectMode.SelectRead) Then
Debug.WriteLine("This Socket is writable.")
Dim handler As Socket = aSocket.Accept()
handler.Receive(bytes, 0, handler.Available, SocketFlags.None)
  Debug.WriteLine("***********recieve***********")
End If
解決しました。 
socket.poll を使って非同期を使わないで監視ができました。
socket.poll で、受信を監視し、あれば、accept、無ければ何しません。
accept 以後は、soket.aviable でrecieve を監視して、受信してれば読み込み、してなければ無視しています。試行錯誤の甲斐あってなんとなく、TCP socket が見えてきました。
---------------------------------------
aSocket.Bind(aIPEndpoint)
aSocket.Listen(1)
     タイマー起動、以下、タイマーで継続

If aSocket.Poll(200, SelectMode.SelectRead) Then
handler = aSocket.Accept()
Debug.WriteLine("**************acceptcallback***********")
End If
If handler Is Nothing Then Exit Sub
If handler.Available > 0 Then
Array.Clear(bytes, 0, 1024)
handler.Receive(bytes, 0, handler.Available, SocketFlags.None)
       受信処理
  • 題名: Re[2]: socket select、poll
  • 著者: nagasaka
  • 日時: 2004/11/25 10:38:34
  • ID: 7644
  • この記事の返信元:
  • この記事への返信:
    • (なし)
  • ツリーを表示
■No7643に返信(nagasakaさんの記事)
> 解決しました。お世話になりました。
 
解決済み!

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