• 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();
            }
  • 相关阅读:
    我的项目物业收费
    我的项目人员定位
    我的简历
    我的项目证券分析
    MSIL探索-序
    VC++深入详解笔记.cpp
    减少图片分辨率
    PL/SQL Developer 7.1 正式版 完美破解
    Lamp软件环境安装
    CentOS 6.4 安装
  • 原文地址:https://www.cnblogs.com/tgdjw/p/4519526.html
Copyright © 2020-2023  润新知