C#中进行UDP通信时,在发送数据的时候,如果不事先Bind一个IP地址,就会随机分配一个地址进行发送数据。
发送端
class Program
{
static Socket client;
static void Main(string[] args)
{
client = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
Thread t = new Thread(sendMsg);
t.Start();
Console.WriteLine("发送端已经开启");
}
static void sendMsg()
{
EndPoint point = new IPEndPoint(IPAddress.Parse("192.168.1.106"), 6001);
while (true)
{
string msg = Console.ReadLine();
client.SendTo(Encoding.UTF8.GetBytes(msg), point);
}
}
}
接收端
class Program
{
static Socket server;
static void Main(string[] args)
{
server = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
server.Bind(new IPEndPoint(IPAddress.Parse("192.168.1.106"), 6001));//绑定端口号和IP
Console.WriteLine("接收端已经开启");
Thread t = new Thread(ReciveMsg);//开启接收消息线程
t.Start();
}
static void ReciveMsg()
{
while (true)
{
EndPoint point = new IPEndPoint(IPAddress.Any, 0);//用来保存发送方的ip和端口号
byte[] buffer = new byte[1024];
int length = server.ReceiveFrom(buffer, ref point);//接收数据报
string message = Encoding.UTF8.GetString(buffer, 0, length);
Console.WriteLine(point.ToString() + message);
}
}
}
第一次打开发送数据之后结果如图
重新打开发送端进行发送数据
192.168.1.106是本机IP
可以看到重新打开发送端之后分配了一个新的端口进行发送数据。