unity学习笔记(四) |
您所在的位置:网站首页 › bs2是什么游戏 › unity学习笔记(四) |
引入引用 using System.Net; using System.Net.Sockets; using System.Threading; 服务端创建Socket,绑定端口,设置最大连接量,开启一个线程来监听是否有客户端连接 //监听套接字 前台 static Socket listenSocket; //保存连接的客户端 static List clientSockets = new List(); static void Main(string[] args) { //创建监听套接字 listenSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); //绑定端口 IPEndPoint ip = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 5555); listenSocket.Bind(ip); //设定一个监听的最大数量 listenSocket.Listen(10); //开启线程 Thread thread = new Thread(Listen); //设置为后台线程 thread.IsBackground = true; thread.Start(); Console.ReadKey(); }监听端口,将连接的客户端newSocket保存,开启一个线程来监听客户端发来的消息 static void Listen() { //开始监听 Console.WriteLine("开始监听"); while (true) { Socket newSocket = listenSocket.Accept(); Console.WriteLine("有客户端链接"); //创建线程监听客户端发送的消息 Thread thread = new Thread(ReceiveMessage); thread.IsBackground = true; thread.Start(newSocket); //告诉其他客户端有客户端链接了 foreach (Socket socket in clientSockets) { socket.Send(new UTF8Encoding().GetBytes(newSocket.RemoteEndPoint.ToString() + ":已上线!")); } //保存客户端 clientSockets.Add(newSocket); } }接收消息 static void ReceiveMessage(object obj) { Socket newSocket = (Socket)obj; while (true) { try { //监听消息 byte[] bs = new byte[1024]; int num=newSocket.Receive(bs); Console.WriteLine(newSocket.RemoteEndPoint.ToString() + ":" + new UTF8Encoding().GetString(bs)); byte[] bs2 = new byte[num]; for(int i = 0; i < num; i++) { bs2[i] = bs[i]; } SentToOther(newSocket, bs2); } catch { Console.WriteLine(newSocket.RemoteEndPoint.ToString() + ":客户端断开"); clientSockets.Remove(newSocket); return; } } }将消息发送给其他客户端 static void SentToOther(object obj, byte[] bs) { Socket newSocket = (Socket)obj; foreach (Socket socket in clientSockets) { byte[] mes = new UTF8Encoding().GetBytes(newSocket.RemoteEndPoint.ToString() + ":" + new UTF8Encoding().GetString(bs)); Console.WriteLine(mes.Length); socket.Send(mes); } } 客户端创建客户端的socket,连接服务端,开启一个线程监听服务端发来的消息 static Socket socket; static void Main(string[] args) { socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); //创建要链接的ip IPEndPoint ip = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 5555); //连接 socket.Connect(ip); //开启监听消息线程 Thread thread = new Thread(ReceiveMessage); thread.IsBackground = true; thread.Start(); while (true) { string content = Console.ReadLine(); //发送消息 socket.Send(new UTF8Encoding().GetBytes(content)); } Console.ReadKey(); }监听服务端发来的消息 static void ReceiveMessage() { while (true) { //接收服务端发来的消息 byte[] bs = new byte[1024]; int i=socket.Receive(bs); string str = new UTF8Encoding().GetString(bs); Console.WriteLine("服务端:"+new UTF8Encoding().GetString(bs)); } } |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |