Udp通信【转】

 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();
        }
原文地址:https://www.cnblogs.com/tgdjw/p/4519526.html