两台局域网电脑A B 分别设置isSender 为true和false,就可以实现自动寻找与连接。
using System.Net;
using System.Net.Sockets;
using System.Text;
Console.WriteLine("Hello, World!");
var port = 8056;
var sock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
//255.255.255.255
EndPoint sendEndPoint = new IPEndPoint(IPAddress.Broadcast, port);
EndPoint receiveEndPoint = new IPEndPoint(IPAddress.Any, port);
sock.Bind(receiveEndPoint);
var isSender = false;
var sendStr = "Hello World!";
if (isSender)
{
sock.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, 1);
var data = Encoding.UTF8.GetBytes(sendStr);
new Thread(OnReceive).Start();
while (true)
{
sock.SendTo(data, sendEndPoint);
Thread.Sleep(1000);
}
}
else
{
var data = new byte[1024];
var response = Encoding.UTF8.GetBytes("VR");
while (true)
{
var length = sock.ReceiveFrom(data, ref receiveEndPoint);
var ipEndPoint = receiveEndPoint as IPEndPoint;
if (ipEndPoint is not null)
{
var str = Encoding.UTF8.GetString(data, 0, length);
Console.WriteLine($"{ipEndPoint.Address}:{ipEndPoint.Port}> {str}");
sock.SendTo(response, receiveEndPoint);
}
}
}
void OnReceive()
{
var data = new byte[1024];
while (true)
{
var length = sock.ReceiveFrom(data, ref receiveEndPoint);
var ipEndPoint = receiveEndPoint as IPEndPoint;
if (ipEndPoint is not null)
{
var str = Encoding.UTF8.GetString(data, 0, length);
if (str == sendStr)
{
continue;
}
Console.WriteLine($"{ipEndPoint.Address}:{ipEndPoint.Port}> {str}");
}
}
}