static void Main(string[] args) { Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); IPEndPoint localEP = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8002); socket.Bind(localEP); //启动异步接收 State state = new State(socket); socket.BeginReceiveFrom(state._buffer, 0, state._buffer.Length, SocketFlags.None, ref state._remoteEP, FuncCallback, state); Console.ReadLine(); socket.Close(); } //异步接收回调函数 private static void FuncCallback(IAsyncResult ar) { State state = ar.AsyncState as State; Socket socket = state._socket; try { int byteRead = socket.EndReceiveFrom(ar, ref state._remoteEP); Console.WriteLine("客户端终结点:{0}", state._remoteEP.ToString()); Console.WriteLine("接收的数据字节数{0}", byteRead); string msg = Encoding.Default.GetString(state._buffer, 0, byteRead); Console.WriteLine("来自客户端信息{0}", msg); SendMessage(socket, state._remoteEP, "成功接收"); } catch (Exception ex) { Console.WriteLine("异常:" + ex.Message); } finally { //非常重要:继续异步接收 socket.BeginReceiveFrom( state._buffer, 0, state._buffer.Length, SocketFlags.None, ref state._remoteEP, FuncCallback, state); } } private static void SendMessage(Socket socket, EndPoint endPoint, string msg) { byte[] bytes = Encoding.Default.GetBytes(msg); socket.SendTo(bytes, endPoint); } } class State { public State(Socket socket) { this._buffer = new byte[1024]; this._socket = socket; this._remoteEP = new IPEndPoint(IPAddress.Any, 0); } public Socket _socket { get; private set; } public byte[] _buffer { get; private set; } public EndPoint _remoteEP; }
使用udpclient类
private static IPAddress ip = IPAddress.Parse("127.0.0.1"); private static int port = 12345; private static void StartListener() { UdpClient listener = new UdpClient(); IPEndPoint groupEP = new IPEndPoint(ip, port); listener.JoinMulticastGroup(ip); listener.Connect(groupEP); byte[] bytes = listener.Receive(ref groupEP); listener.Close(); } private static void SendMsg(string msg) { UdpClient sender = new UdpClient(); IPEndPoint ep = new IPEndPoint(ip, port); byte[] bytes = Encoding.ASCII.GetBytes(msg); sender.Send(bytes, bytes.Length, ep); sender.Close(); }