none
Socketを使用したサーバー作り RRS feed

  • 質問

  • こんにちは。

    Socketを使用したサーバーをつくってますが

    [Visual Basic 2008]

    Private _Socket As Socket

    ----------------------------
    'ソケットの生成
    _Socket = New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)

    'ソケットの対応付け
    Dim LocalIPAdress As IPAddress = IPAddress.Parse("XXX.XXX.XXX.XXX")
    Dim SetIPEndPoint As IPEndPoint
    SetIPEndPoint = New IPEndPoint(LocalIPAdress, CInt(XXXX))
    _Socket.Bind(SetIPEndPoint)

    '接続要求待ち
    _Socket.Listen(1)

    '接続要求の受付
    _Socket.Accept()

    Dim buffer(1024) As Byte
    Dim returnValue As Integer

    returnValue = _Socket.Receive(buffer, buffer.Length, SocketFlags.None)

    まで進んだところで
    ソケットが接続されていないか、sendto 呼び出しを使ってデータグラム ソケットで送信するときにアドレスが指定されていないため、データの送受信を要求することは禁じられています。
    というエラーが発生します。

    Acceptで接続要求は受け付けて、接続はできているようなのですが・・・・

    どなたかご教授下さい。

    因みに、今回はTcpListenerでなく、Socketで試みていますので、TcpListenerでない方法でお願い致します。
    2009年5月31日 17:19

回答

すべての返信

  • Socket.Acceptの戻り値は確認されていますか?
    http://msdn.microsoft.com/ja-jp/library/system.net.sockets.socket.accept.aspx



    > TCP などのコネクション指向のプロトコルを使用する場合、サーバーは Listen メソッドを使用して接続を待機します。
    > Accept メソッドは受信接続要求を処理して、リモート ホストとのデータ通信に使用できる Socket を返します。
    > この返された Socket を使用して、Send メソッドまたは Receive メソッドを呼び出します。
    http://msdn.microsoft.com/ja-jp/library/system.net.sockets.socket.aspx より。


    解決した場合は、参考になった返信に「回答としてマーク」のボタンを利用して、回答に設定しましょう(複数に設定できます)。
    2009年5月31日 22:29
    モデレータ
  • 有難うございます。

    _Socket = _Socket.Accept()

    でいけました。
    Receiveをキーワードで調べて、迷子になってました。
    助かりました。
    2009年5月31日 23:20
  • _Socket = _Socket.Accept()

    でいけました。
    これは、元の _Socket が失われていませんか?
    問題がないのかどうか、きちんと見直してみて下さい。
    解決した場合は、参考になった返信に「回答としてマーク」のボタンを利用して、回答に設定しましょう(複数に設定できます)。
    2009年6月1日 14:46
    モデレータ
  • 返信有難うございます。

    まだ余り作りこんでないんですが、今のところいけてそうな感じなんですが・・・

    サーバーとクライアントが1対1で通信する処理を作ってるので、これでいいのかな?と思ってたのですが。
    問題があれば
    Private _RecSocket As Socket
    _RecSocket = _Socket.Accept()
    って感じの別の変数(?クラス?)にしてみます。

    ご指摘有難うございます。

    2009年6月3日 4:59