一、广播消息 由于Tcp是有连接的,所以不能用来发送广播消息。发送广播消息,必须用到Udp,Udp可以不用建立连接而发送消息。广播消息的目的IP地址是一种特殊IP地址,称为广播地址。广播地址由IP地址网络前缀加上全1主机后缀组成,如:192.168.1.255是192.169.1.0这个网络的广播地址;130.168.255.255是130.168.0.0这个网络的广播地址。向全部为1的IP地址(255.255.255.255)发送消息的话,那么理论上全世界所有的联网的计算机都能收得到了。但实际上不是这样的,一般路由器上设置抛弃这样的包,只在本地网内广播,所以效果和向本地网的广播地址发送消息是一样的。 利用udp广播可以实现像cs中建立服务器后,客户端可以收到服务器消息从而进行连接。二、服务端开启线程不断广播自己ip地址等信息,等待客户端接收using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Net; using System.Net.Sockets; using System.Threading; using System.Threading.Tasks;namespace scoket_udp_服务器 { class Program { private static Socket sock; private static IPEndPoint iep1; private static byte[] data; static void Main(string[] args) { sock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); //255.255.255.255 iep1 = new IPEndPoint(IPAddress.Broadcast, 9050); string hostname = Dns.GetHostName(); data = Encoding.ASCII.GetBytes(hostname); sock.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, 1); Thread t = new Thread(BroadcastMessage); t.Start(); //sock.Close(); Console.ReadKey(); } private static void BroadcastMessage() { while (true) { sock.SendTo(data, iep1); Thread.Sleep(2000); }
} } }三、客户端using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Net; using System.Net.Sockets; using System.Threading.Tasks;namespace socket客户端udp { class Program { static void Main(string[] args) { Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); IPEndPoint iep = new IPEndPoint(IPAddress.Any, 9050); sock.Bind(iep); EndPoint ep = (EndPoint)iep; Console.WriteLine("Ready to receive…"); byte[] data = new byte[1024]; int recv = sock.ReceiveFrom(data, ref ep); string stringData = Encoding.ASCII.GetString(data, 0, recv); Console.WriteLine("received: {0} from: {1}", stringData, ep.ToString()); sock.Close(); Console.ReadKey(); } } }本文永久更新链接地址:http://www.linuxidc.com/Linux/2015-11/124907.htm