Unity网络开发记录(二):采用多线程处理服务端对客户端的连接和信息处理

news/2024/9/28 7:35:17/

 在主线程处理对所有客户端的连接以及消息处理,是非常消耗时间的,所以对于监听客户端的连接,以及信息的接收,都额外开线程去处理,减轻主线程的压力

using System.Globalization;
using System.Net;
using System.Net.Sockets;
using System.Text;namespace TechTcpServerTest
{internal class Program{static Socket socket;static Socket socketClient;static List<Socket> socketClients = new List<Socket>();static void Main(string[] args){socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);try{IPEndPoint ipPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8080);socket.Bind(ipPoint);}catch (Exception){return;                }socket.Listen(1024);Thread threadAccept = new Thread(AcceptClientConnect);threadAccept.Start();Thread threadResive = new Thread(ReceiveMsg);threadAccept.Start();while(true){if (Console.ReadLine() != "Quit"){return;}for(int i = 0; i < socketClients.Count; ++i){socketClients[i].Shutdown(SocketShutdown.Both);socketClients[i].Close();}socketClients.Clear();Console.WriteLine("所有连接已断开,socket套接字关闭");break;}Console.ReadLine();}static void AcceptClientConnect(){while (true){socketClient = socket.Accept();socketClients.Add(socketClient);if (socketClient.RemoteEndPoint != null){socketClient.Send(Encoding.UTF8.GetBytes($"{socketClient.RemoteEndPoint.ToString()}客户端已成功连接服务器"));}}}static void ReceiveMsg(){int i;int num;byte[] receiveBuffer = new byte[1024];while(true){for(i = 0; i < socketClients.Count; ++i){if (socketClients[i].Available > 0){num = socketClients[i].Receive(receiveBuffer);ThreadPool.QueueUserWorkItem(HandleMsg, (socketClients[i], Encoding.UTF8.GetString(receiveBuffer, 0, num)));}}}}static void HandleMsg(object obj){(Socket s, string str)info = ((Socket s, string str))obj;if (info.s.RemoteEndPoint != null){Console.WriteLine($"收到来次{info.s.RemoteEndPoint.ToString()}的消息:{info.str}");}}}
}

启动服务端,在unity中启动客户端,客户端最基本的代码在上一节,发现依旧可以正常连接,本节处理完毕


http://www.ppmy.cn/news/1531071.html

相关文章

速盾:高防cdn跟其他防御产品有什么不同?

高防CDN与其他防御产品相比&#xff0c;有以下几个不同之处&#xff1a; 抗DDoS能力更强&#xff1a;高防CDN具备强大的抗DDoS攻击能力&#xff0c;能够有效阻断各种类型的DDoS攻击&#xff0c;包括SYN Flood、UDP Flood、HTTP Flood等。它利用分布式节点、智能算法以及大规模带…

智能电话机器人的优势有哪些突出的?电销系统搭建部署

智能电话机器人作为人工智能语音系列的产品&#xff0c;是一款帮助电销企业降低成本&#xff0c;提高工作效率的销售辅助工具。同时&#xff0c;电话机器人也是人工智能落地产品中为数不多的营销型产品。 在传统的电话营销场景中&#xff0c;销售员虽然可以借助外呼软件进行自…

计算机视觉硬件整理(四):相机与镜头参数介绍

文章目录 前言一、工业相机常用分类二、工业相机的基本参数三、工业相机的接口四、工业镜头的参数五、工业镜头的选择要点 前言 随着科技的飞速发展&#xff0c;工业自动化和智能制造在当今社会扮演着越来越重要的角色。在这个背景下&#xff0c;工业相机作为一种关键的视觉检…

opencv实战项目二十七:基于meanshif的视频脸部跟踪

文章目录 前言一、Mean Shift是什么&#xff1f;二、opencv中meanshift使用流程三、使用代码&#xff1a;四、效果&#xff1a; 前言 在当今这个信息化时代&#xff0c;图像和视频处理技术已经渗透到我们生活的方方面面&#xff0c;从安防监控、智能交通到人机交互等领域&…

Golang | Leetcode Golang题解之第440题字典序的第K小数字

题目&#xff1a; 题解&#xff1a; func getSteps(cur, n int) (steps int) {first, last : cur, curfor first < n {steps min(last, n) - first 1first * 10last last*10 9}return }func findKthNumber(n, k int) int {cur : 1k--for k > 0 {steps : getSteps(cu…

云手机的默认ip地址是什么

云手机&#xff08;Cloud Phone&#xff09;是一种基于云计算技术的虚拟手机&#xff0c;它可以在云端运行&#xff0c;使用户能够通过互联网访问手机应用和服务。云手机的IP地址通常取决于以下几个因素&#xff1a; 1. 云服务提供商 不同的云服务提供商&#xff08;如AWS、G…

Jenkins 2.477版本升级

Jenkins 2.477版本在2024年9月17日发布&#xff0c;此版本中包含了一些增强功能和错误修复。 增强功能&#xff1a; 对用户账号屏幕的内容和外观进行了改进 。对于缺少作业的视图&#xff0c;使用了Notice组件 。更新了“Jenkins正在启动”页面的外观 。 错误修复&#xff1…

华为云DevSecOps和DevOps

目录 1.华为云DevSecOps和DevOps 1.1 DevSecOps 1.1.1 核心功能 1.1.2 优势 1.2 DevOps 1.2.1 核心功能 1.2.2 优势 1.3 DevOps和DevSecOps的区别 1.3.1 安全性集成 1.3.2 自动化的安全工具 1.3.3 团队协作 1.3.4 质量与合规性 1.3.5 成本与风险管理 1.3.5 总结 …