如何修改UdpClient的IP地址
本文关键字:UdpClient IP 地址 修改 何修改 | 更新日期: 2023-09-27 18:09:44
是否有办法在飞行中更改UdpClient IP地址?StartUpd()
抛出
System.Net.Sockets。SocketException:每个套接字只使用一次地址(协议/网络地址/端口)通常是允许的
即使在做了StopUpd()
之后。
private static UdpClient udpClientR;
void StartUpd()
{
try
{
udpClientR = new UdpClient();
udpClientR.Connect(Settings.rxIPAddress, PORT_RX_LOCAL);
var t1 = new Thread(() => UdpReceiveThread(PORT_RX_REMOTE))
{ IsBackground = true };
t1.Start();
...
private void StopUpd()
{
try
{
udpClientR.Close();
...
在调用StartUpd
和StopUpd
之前,您需要一些时间来启动和停止线程。您可以在Close
UDP客户端之后等待线程退出。这将确保在您尝试重新连接之前关闭它。所以代码应该像这样:
private UdpClient udpClientR;
private Thread t1;
void StartUpd()
{
udpClientR = new UdpClient();
udpClientR.Connect(Settings.rxIPAddress, PORT_RX_LOCAL);
t1 = new Thread(() => UdpReceiveThread(PORT_RX_REMOTE)) { IsBackground = true };
t1.Start();
// Give it some time here to startup, incase you call StopUpd too soon
Thread.Sleep(1000);
}
private void StopUpd()
{
udpClientR.Close();
// Wait for the thread to exit. Calling Close above should stop any
// Read block you have in the UdpReceiveThread function. Once the
// thread dies, you can safely assume its closed and can call StartUpd again
while (t1.IsAlive) { Thread.Sleep(10); }
}
其他随机注意,看起来你拼错了函数名,可能应该是StartUdp
和StopUdp
您正在从调用连接方法的设置中设置ip和端口。
Connect调用建立UdpClient连接到的默认远程地址,这意味着您不必在调用Send
方法时指定此地址。这段代码应该不会导致您所看到的错误。这个错误是试图用两个客户端在同一个端口上侦听的结果,这让我相信它可能是你的UdpReceiveThread,这实际上是这里的问题。
可以在UdpClient的构造函数中指定要绑定的本地端口/地址。