“请求的地址在其上下文中无效”SocketException

时间:2014-03-09 22:17:14

标签: c# socketexception

我正在尝试将端口45624上的广播数据包(dest:FF.FF.FF.FF)发送到本地网络,除了在创建UdpClient时抛出异常。我已尝试使用其他地址,包括实际上不是子网掩码的地址,但它总是引发异常。同上45624以外的其他港口。

byte[] SearchAddr = new byte[] { 255, 255, 255, 255 };
IPAddress SearchIP = new IPAddress(SearchAddr);
IPEndPoint EndPoint = new IPEndPoint(SearchIP, 45624);
UdpClient Searcher = new UdpClient(EndPoint);
byte[] SearchPacket = new byte[] { 0x34, 0x00, 0xB0, 0xFA, 0x02, 0x00, 0x08, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x70, 0x6C, 0x61, 0x79, 0x02, 0x00, 0x0E, 0x00, 0x20, 0x74, 0x79, 0x99,
    0xF5, 0xF5, 0xCF, 0x11, 0x98, 0x27, 0x00, 0xA0, 0x24, 0x14, 0x96, 0xC8, 0x00, 0x00, 0x00, 0x00,
    0x81, 0x00, 0x00, 0x00 };
Searcher.Send(SearchPacket, SearchPacket.Length);
byte[] SearchReply = Searcher.Receive(ref EndPoint);
string ReplyText = "";
for (int I = 0; I < SearchReply.Length; I++)
    ReplyText += SearchReply[I].ToString("X2") + " ";
MessageBox.Show(ReplyText);

有谁知道究竟是什么问题?

1 个答案:

答案 0 :(得分:4)

UdpClient.Send的文档阐明了这个问题:

  

此重载将数据报发送到在其中建立的远程主机   Connect方法并返回发送的字节数。如果你不   在调用此重载之前调用ConnectSend方法将抛出   SocketException

您应该使用this overload代替:

Searcher.Send(SearchPacket, SearchPacket.Length, EndPoint);