2011-10-24 21 views
0

ヘルプ/フィードバックをいただければ幸いです。私はそれがサーバーから来るデータを受信するように放送クライアント受信機を開発しています。クライアントはASYNCHRONOUSLYのデータを送受信します。つまり、私はsocket.BeginReceiveFrom()とsocket.BeginSendTo()などのメソッドを使用します。 しかし、私は何とかサーバーのIPアドレスを取得したいと思いますが、RemoteEndPoint()メソッドを使用してIPを取得するとサーバーのアドレスがエラーになります。コードの一部を以下に示します。Cの非同期ブロードキャストクライアント#

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); 
    } 
} 
+3

**どのようなエラーあなたが得るん**を返すEndReceiveFromを呼び出す必要がありますか? – SLaks

+1

これはあなたの以前の質問の延長であると信じています:http://stackoverflow.com/questions/7842443/asynchronous-client-broadcast-receiver/7853129#7853129私がそこに提供した答えは、あなたがサーバのIPを得ることができるでしょう – robowahoo

+0

Thx robowahoo、私はあなたがリンクに表示するコードで私のエラーを見ました。 EndReceived()メソッドの代わりに、私はエンドポイントを返すEndReceiveFrom()を使用しました。 –

答えて

0

TCPとUDPが混在しているため、エラーが発生します。

EndReceiveは、接続ベースのプロトコルに使用されます。同様にRemoteEndPointプロパティです。

また、リモートエンドポイント