Клиент асинхронного вещания в c # - PullRequest
0 голосов
/ 24 октября 2011

любая помощь / обратная связь будет оценена. Я разрабатываю приемник широковещательного клиента так, чтобы он получал данные, поступающие с сервера. клиент отправляет и получает данные в асинхронном режиме. другими словами, я использую методы, такие как 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);
    }
}  

1 Ответ

0 голосов
/ 25 октября 2011

Вы получаете ошибку, поскольку вы смешиваете TCP и UDP.

EndReceive используется для протоколов на основе подключения. Как и RemoteEndPoint свойство.

Вы должны вызвать EndReceiveFrom , который также возвращает удаленную конечную точку

...