この操作を行う前に Bind メソッドを呼び出してください 例外を解決するには

解決


HTML-M  2008-06-26 06:47:15  No: 139973

皆さん方には、いつも大変お世話になっております。

http://codezine.jp/a/article.aspx?aid=22
上記のサイト(DOBON.NET関係。http://dobon.net/)
から入手した、TCPチャットのサーバー側で、例外「この操作を行う前に Bind メソッドを呼び出してください」がでます。

'クライアントの接続待ちスタート
Private Shared Sub StartAccept( _
    ByVal server As System.Net.Sockets.Socket)
    '接続要求待機を開始する
    server.BeginAccept(New System.AsyncCallback( _
        AddressOf AcceptCallback), server)
End Sub

'BeginAcceptのコールバック
Private Shared Sub AcceptCallback(ByVal ar As System.IAsyncResult)
    'サーバーSocketの取得
    Dim server As System.Net.Sockets.Socket = _
        CType(ar.AsyncState, System.Net.Sockets.Socket)

    '接続要求を受け入れる
    Dim client As System.Net.Sockets.Socket = Nothing
    Try
        'クライアントSocketの取得
        client = server.EndAccept(ar)
    Catch
        System.Console.WriteLine("閉じました。")
        Return
    End Try

    'クライアントが接続した時の処理をここに書く
    'ここでは文字列を送信して、すぐに閉じている
    client.Send(System.Text.Encoding.UTF8.GetBytes("こんにちは。"))
    client.Shutdown(System.Net.Sockets.SocketShutdown.Both)
    client.Close()

    '接続要求待機を再開する
    server.BeginAccept(New System.AsyncCallback( _
        AddressOf AcceptCallback), server)
End Sub

'接続要求待機を開始する
    server.BeginAccept(New System.AsyncCallback( _
        AddressOf AcceptCallback), server)

ここで、例外が発生します。

tcpには、あまり慣れていないので、さっぱりわかりません。

どうすればよいのでしょうか?


やじゅ  2008-06-26 09:32:21  No: 139974

リンク先のソースを改造しませんでした?
足りない箇所がありますよ。
Dim so As New AsyncStateObject(server)
server.BeginAccept(New System.AsyncCallback( _
        AddressOf AcceptCallback), so)

DOBONさんのとこに掲示板あるんですが、あえてここですか?


HTML-M  2008-06-26 15:31:30  No: 139975

>リンク先のソースを改造しませんでした?
>足りない箇所がありますよ。
>Dim so As New AsyncStateObject(server)
>server.BeginAccept(New System.AsyncCallback( _
>        AddressOf AcceptCallback), so)

すみません。サーバー側について教えてください。
(伝わってなくてすみません)

>DOBONさんのとこに掲示板あるんですが、あえてここですか?
すみません。


やじゅ  2008-06-26 16:31:55  No: 139976

すみません、確かにクライアント側見てましたね(^^;


Hongliang  2008-06-26 17:11:18  No: 139977

で、Bind はやってるんですか?
デバッグでちゃんと呼び出していることは確認しましたか?


HTML-M  2008-06-27 05:39:42  No: 139978

やはり呼び出す必要があったのですね(当然のことですみません;)
IPEndPointの指定はどうやるんですか?


HTML-M  2008-06-27 06:00:17  No: 139979

いろいろいじってデバッグ成功したのがこれです。(実際にクライアントを接続してみないとわかりませんが。)

'接続要求待機を開始する
        Dim hostAdd As System.Net.IPAddress = System.Net.Dns.Resolve("localhost").AddressList(0)
        server.Bind(New System.Net.IPEndPoint(hostAdd, 2001))
        server.Listen(10)
        server.BeginAccept(New System.AsyncCallback( _
            AddressOf CALLBACK), server)

Listenのところの  引数  キューの最大長  ってなんですか?


HTML-M  2008-06-29 02:22:19  No: 139980

なんとか自力で解決できました。

お騒がせしました。すみません。
ありがとうございました。


HTML-M  2008-06-29 02:23:14  No: 139981

解決チェック。


※返信する前に利用規約をご確認ください。




  


  このエントリーをはてなブックマークに追加