【问题标题】:Asynchronous broadcast client in c#c#中的异步广播客户端
【发布时间】:2011-10-24 13:32:12
【问题描述】:

任何帮助/反馈将不胜感激。我正在开发一个广播客户端接收器,以便它接收来自服务器的数据。客户端异步发送和接收数据。换句话说,我使用 socket.BeginReceiveFrom() 和 socket.BeginSendTo() 等方法 但是,我想以某种方式获取服务器的 IP 地址,但是当我使用 RemoteEndPoint() 方法获取服务器的 IP 地址时,我得到了错误。部分代码如下所示。

private void Form1_Load(object sender, EventArgs e) {
    byteData = msgToSend.ToByte();

    clientSocket.BeginSendTo(byteData, 0, byteData.Length, SocketFlags.None, epServer, new AsyncCallback(OnSend), null);

    byteData = new byte[1024];
    //Start listening to the data asynchronously
    clientSocket.BeginReceiveFrom (byteData,0, byteData.Length,SocketFlags.None,ref epServer,new AsyncCallback(OnReceive),null);
}

private void OnReceive(IAsyncResult ar) {            
    try {                
        clientSocket.EndReceive(ar);
        byteData = new byte[1024];

        // HERE MY CODE TO FIND THE IP ADDRESS OF THE SERVER
        IPEndPoint ip = (IPEndPoint)epServer.RemoteEndPoint;
        MessageBox.Show(Convert.ToString(ip.Address));

        //Start listening to receive more data from the user
        clientSocket.BeginReceiveFrom(byteData, 0, byteData.Length,             SocketFlags.None, ref epServer,new AsyncCallback(OnReceive), null);
    } catch (ObjectDisposedException) { 

    } catch (Exception ex) {
        MessageBox.Show(ex.Message, "SGSclient: " + strName, MessageBoxButtons.OK, MessageBoxIcon.Error);
    }
}  

【问题讨论】:

  • 我相信这是您之前问题的扩展:stackoverflow.com/questions/7842443/… 我在那里提供的答案应该可以让您获得服务器的 IP
  • Thx robowahoo,我刚刚在链接中显示的代码中看到了我的错误。而不是 EndReceived() 方法,我使用 EndReceiveFrom() 返回终点。

标签: c# sockets network-programming client-server


【解决方案1】:

由于您正在混合 TCP 和 UDP,您会收到错误消息。

EndReceive 用于基于连接的协议。 RemoteEndPoint 属性也是如此。

您应该调用EndReceiveFrom,它也返回远程端点

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-26
    • 2016-07-21
    • 1970-01-01
    • 2019-08-20
    • 1970-01-01
    • 2016-12-02
    • 1970-01-01
    • 2014-01-11
    相关资源
    最近更新 更多