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

解決


HTML-M  2008-06-25 21:47:15  No: 139973  IP: 192.*.*.*

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

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 00:32:21  No: 139974  IP: 192.*.*.*

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

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

編集 削除
HTML-M  2008-06-26 06:31:30  No: 139975  IP: 192.*.*.*

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

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

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

編集 削除
やじゅ  2008-06-26 07:31:55  No: 139976  IP: 192.*.*.*

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

編集 削除
Hongliang  2008-06-26 08:11:18  No: 139977  IP: 192.*.*.*

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

編集 削除
HTML-M  2008-06-26 20:39:42  No: 139978  IP: 192.*.*.*

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

編集 削除
HTML-M  2008-06-26 21:00:17  No: 139979  IP: 192.*.*.*

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

'接続要求待機を開始する
        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-28 17:22:19  No: 139980  IP: 192.*.*.*

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


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

編集 削除
HTML-M  2008-06-28 17:23:14  No: 139981  IP: 192.*.*.*

解決チェック。

編集 削除