2012-04-04 12 views
0

私は、以下に示すプログラムがあります。UDP C#の接続

Socket receiveSocket = new Socket(AddressFamily.InterNetwork, 
            SocketType.Dgram, ProtocolType.Udp); 

EndPoint bindEndPoint = new IPEndPoint(IPAddress.Any, 3838); 

byte[] recBuffer = new byte[256]; 

public Form1() 
{ 
    InitializeComponent(); 
} 

private void button1_Click(object sender, EventArgs e) 
{ 
    receiveSocket.Bind(bindEndPoint); 
    receiveSocket.Receive(recBuffer); 
} 

をし、それが働いているが、私はちょうどそれが動作しない特定のIPアドレス、 聴きたいときには、「要求されたアドレスをexeptionをスローしますコンテキスト内で無効です "

新しいコード: EndPoint bindEndPoint = new IPEndPoint(IPAddress.Parse(" 192.168.40.1 ")、3838);

+0

あなたは 'listen * to *'の代わりに 'listen * *特定IP'を意味しましたか?それはあなたの新しいサンプルがあなたにしたいことを示唆しているからです。 – mtijn

+0

あなたのコンピュータにそのIPアドレスが確実にありますか?また、 'Recieve'はTCP用であり、UDP用ではありません。 'ReceiveFrom'を使用してください – jgauffin

答えて

1

バインドするIPアドレスは、実際にコンピュータのネットワークインターフェイスに割り当てられているIPアドレスの1つにする必要があります。

はあなたがイーサネットインターフェースと無線インターフェースを持っているとしましょう

イーサネット:192.168.1.40

無線:192.168.1.42

あなたのソケットにBindメソッドを呼び出すとき、あなたはどのインタフェースでデータを聞きたいのかを教えています。 それは「どちらかのもの」か、たとえばイーサネットインターフェイスだけです。

私はこれがあなたが探しているものではないと推測していますか?

おそらくあなたは、あなたが探しすることができることは

var remoteEndPoint = new IPEndPoint(IPAddress.Parse("192.168.1.40"), 0) 
receiveSocket.ReceiveFrom(buffer, remoteEndpoint); 

これは、あなたがデータを受け入れ、そこからソースを制限しているwhateサーバー

への接続を行うことができる人を制限しようとしています。

+1

IPAddress.Parse(" 192.168.40.1 ")はIPAddress.Parse(" 192.168.1.40 ")である必要がありますか? –

+0

ニースキャッチ!ありがとう@MysticLin – TimothyP

関連する問題