1

以下に示すプログラムがあります。

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アドレスをリッスンしたいだけでは動作しませんが、「要求されたアドレスはコンテキストで無効です」という例外がスローされます。

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

4

1 に答える 1

2

バインドする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);

これにより、データを受け入れるソースが制限されます。

于 2012-04-04T08:37:56.520 に答える