Unity_通讯案例_Udp

来源:互联网 发布:卫星影像下载软件 编辑:程序博客网 时间:2024/05/21 19:29

UdpServer

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Net;using System.Net.Sockets;using System.Threading;using System.Text;namespace UdpServer{    class Program    {        static void Main(string[] args)        {            Server server = new Server();            server.StartUp();        }    }    public class Server    {        private Socket _server;        private string _ip ="192.168.30.27";        private int _port = 10000;        private EndPoint endPointRef;        public void StartUp()        {            _server = new Socket(AddressFamily.InterNetwork,SocketType.Dgram,ProtocolType.Udp);            EndPoint endPoint = new IPEndPoint(IPAddress.Parse(_ip),_port);            _server.Bind(endPoint);            //无连接协议;            //_server.Listen(30);            //初始化;            endPointRef = new IPEndPoint(IPAddress.Any, 0);            Thread _receiveClientMsg = new Thread(ReceiveClientMsg);            _receiveClientMsg.Start();        }        public void ReceiveClientMsg()        {            //在while里会有影响            //                     两个占位符    IP的地址占位符 端口占位符            //EndPoint endPoint = new IPEndPoint(IPAddress.Any, 0);            byte[] msgBytes = new byte[1024 * 64];            while (true)            {                try                {                                      int len = _server.ReceiveFrom(msgBytes, ref endPointRef);                    string str = Encoding.UTF8.GetString(msgBytes, 0, len);                    IPEndPoint clientEndPoint = endPointRef as IPEndPoint;                    //                          地址 端口 信息;                    Console.WriteLine("Recevie {0}: {1}:{2}", clientEndPoint.Address.ToString(), clientEndPoint.Port, str);                    Send("服务器回复", endPointRef);                }                catch (Exception e)                {                    Console.WriteLine(e.Message);                }            }        }        public void Send(string str,EndPoint target)        {            _server.SendTo(Encoding.UTF8.GetBytes(str),target);        }    }    }

UpdClient

using System;using System.Net;using System.Net.Sockets;using System.Threading;using System.Text;namespace UpdClient{    class Program    {        static void Main(string[] args)        {            Client client = new Client();            client.StartUp();            while(true)            {                client.Send(Console.ReadLine());            }        }    }    public class Client    {        private Socket _client;        private string _serverIP = "192.168.30.27";        private string _clientIP = "192.168.30.27";        private int _port = 10000;        private int _port1 = 10001;        private EndPoint _serverEndPoint;        private EndPoint _clientEndPoint;        public void StartUp()        {            _client = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);            //配置本地地址 端口(相同的端口不能重复使用)            _serverEndPoint = new IPEndPoint(IPAddress.Parse(_serverIP), _port);            _clientEndPoint = new IPEndPoint(IPAddress.Parse(_clientIP), _port1);            _client.Bind(_clientEndPoint);            //接受线程            Thread _receiveServerMsg = new Thread(ReceiveServerMsg);            _receiveServerMsg.Start();        }        //接收方法;        public void ReceiveServerMsg()        {            while(true)            {                EndPoint endPoint = new IPEndPoint(IPAddress.Any, 0);                byte[] msgBytes = new byte[1024 * 64];                int len = _client.ReceiveFrom(msgBytes, ref endPoint);                string str = Encoding.UTF8.GetString(msgBytes, 0, len);                IPEndPoint clientEndPoint = endPoint as IPEndPoint;                Console.WriteLine("Receive {0} : {1}   : {2}", clientEndPoint.Address.ToString(), clientEndPoint.Port, str);            }          }        /// <summary>        /// 发送信息;        /// </summary>        /// <param name="str"></param>        public void Send(string str)        {            _client.SendTo(Encoding.UTF8.GetBytes(str), _serverEndPoint);        }    }}