求大神帮我把这个Socket改得更稳定点,能链接的客户端数量更多点,当然如果有更好的方案更好,谢谢了

问题描述

求大神帮我把这个Socket改得更稳定点,能链接的客户端数量更多点,当然如果有更好的方案更好,谢谢了。代码如下usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Net.Sockets;usingSystem.IO;usingSystem.Threading;usingSystem.Net;usingExceptionEx;namespaceSocketServer{publicclassReceive{///<summary>///Socket通信集合///</summary>publicstaticDictionary<string,User>dictionary=newDictionary<string,User>();///<summary>///需要重新获取IMEI号集合///</summary>publicstaticDictionary<string,int>dcount=newDictionary<string,int>();///<summary>///保存TcpListener对象///</summary>publicstaticTcpListenermyListener=null;#region接受消息///<summary>///接受消息///</summary>publicstaticvoidTcpMain(){try{//端口intport=9023;if(port==0)return;//IP地址stringhost="127.0.01";#region创建终结点(EndPoint)//把ip地址字符串转换为IPAddress类型的实例IPAddressip=IPAddress.Parse(host);//用指定的端口和ip初始化IPEndPoint类的新实例IPEndPointipe=newIPEndPoint(ip,port);#endregion#region创建socket并开始监听myListener=newTcpListener(ipe);myListener.Start();#endregion#region接受到client连接,为此连接建立新的socket,并接受信息TcpClientnewClient=null;while(myListener!=null){try{newClient=myListener.AcceptTcpClient();//为新建连接创建新的socket}catch(Exceptionce){ExceptionEx.MyExceptionLog.AddLogError("创建链接失败:"+ce.Message);//CloseSocket();break;}Useruser=newUser(newClient);ThreadOneThread=newThread(newParameterizedThreadStart(OneThreadDo));OneThread.Start(user);//ExceptionEx.MyExceptionLog.AddLogError("建立连接"+DateTime.Now);}#endregion}catch(Exceptionce){ExceptionEx.MyExceptionLog.AddLogError(ce.Message+"Socket");}}#endregion#region处理消息///<summary>///处理消息///</summary>///<paramname="value">Socket对象</param>publicstaticvoidOneThreadDo(Objectvalue){Useruser=(User)value;TcpClienttcp=user.client;//遗漏消息stringylmsg="";while(tcp!=null){stringmgs=null;try{byte[]byteR=newbyte[1024*1024];intbytesRead=user.br.Read(byteR,0,byteR.Length);if(bytesRead==0)return;mgs=Encoding.GetEncoding("GBK").GetString(byteR,0,bytesRead);Console.WriteLine(mgs);mgs=mgs.Trim().Replace("","");if(!mgs.Contains("|#")){ylmsg=ylmsg+mgs;continue;}if(!string.IsNullOrEmpty(ylmsg)){mgs=ylmsg+mgs;ylmsg="";}}catch(Exceptionce){ExceptionEx.MyExceptionLog.AddLogError("链接断开:"+ce.Message);break;}try{ExceptionEx.MyExceptionLog.AddLogError("接收到的信息:"+mgs);#region接收信息string[]_msgs=mgs.Split(newstring[]{"|#"},StringSplitOptions.RemoveEmptyEntries);#endregion#region给client端返回信息stringsendStr="";byte[]bs=Encoding.UTF8.GetBytes(sendStr+"|#");user.bw.Write(bs,0,bs.Length);//返回信息给客户端user.bw.Flush();#endregion#region把通信渠道保存到字典//if(msgs.Length>=2&&!dictionary.ContainsKey(msgs[1]))//{//dictionary.Add(msgs[1],user);//}//elseif(msgs.Length>=2&&dictionary.ContainsKey(msgs[1]))//{//dictionary[msgs[1]]=user;//}#endregion}catch(Exceptionce){ExceptionEx.MyExceptionLog.AddLogError(ce.Message+"Socket2");break;}}}#endregion#region发送信息///<summary>///发送信息///</summary>///<paramname="SendType">类型(报警信息,同屏开始信息,同屏结束信息)</param>///<paramname="TerminalNumber">终端编号</param>///<paramname="Port">端口号</param>///<paramname="linkMode">同屏方式</param>publicstaticvoidSend(stringSendType,stringTerminalNumber,stringPort,intLinkMode){try{Userm_User=dictionary[TerminalNumber];//发送内容stringsendStr="";byte[]bs=Encoding.UTF8.GetBytes(sendStr);//把字符串编码为字节m_User.bw.Write(bs,0,bs.Length);m_User.bw.Flush();}catch(Exceptionce){ExceptionEx.MyExceptionLog.AddLogError(ce.Message+";终端编号:"+TerminalNumber+"端口号:"+Port+"同屏方式:"+LinkMode);throw;}}#endregion#region用户信息publicclassUser{publicTcpClientclient{get;privateset;}publicBinaryReaderbr{get;privateset;}publicBinaryWriterbw{get;privateset;}publicUser(TcpClientclient){this.client=client;NetworkStreamnetworkStream=client.GetStream();br=newBinaryReader(networkStream,Encoding.GetEncoding("GBK"));bw=newBinaryWriter(networkStream);}publicvoidClose(){br.Close();bw.Close();client.Close();}}#endregion}}

解决方案

解决方案二:
@本拉灯在不在呢求回复
解决方案三:
我就这点分数了,没有更多了后面又更多了再扑发给你们

时间: 2024-09-13 08:00:17

求大神帮我把这个Socket改得更稳定点,能链接的客户端数量更多点,当然如果有更好的方案更好,谢谢了的相关文章

socket-JAVA代理服务器,用浏览器打开的时候显示的网页信息总是不全,有时候显示不出来,求大神帮我看看

问题描述 JAVA代理服务器,用浏览器打开的时候显示的网页信息总是不全,有时候显示不出来,求大神帮我看看 package work; import java.io.*; import java.net.*; public class MMProxy extends Thread { static public int CONNECT_RETRIES = 5; //尝试与目标主机连接次数 static public int CONNECT_PAUSE = 5; //每次建立连接的间隔时间 stat

求大神帮我分析分析mysql的错误日志

问题描述 求大神帮我分析分析mysql的错误日志 2016-02-17 08:42:20 5388 [Note] Plugin 'FEDERATED' is disabled. 2016-02-17 08:42:20 1828 InnoDB: Warning: Using innodb_additional_mem_pool_size is DEPRECATED. This option may be removed in future releases, together with the o

java 调用cmd 执行读取sql文件问题?求大神帮看下

问题描述 java 调用cmd 执行读取sql文件问题?求大神帮看下 Runtime run =Runtime.getRuntime(); Process process = run.exec("cmd /cmysql -u root -pssdlh test <d:/test.sql"); InputStreamReader ir = new InputStreamReader(process .getInputStream()); LineNumberReader input

基于TCP的客户端服务器通信,如何在终端输入数据进行聊天呢,求大神帮我

问题描述 基于TCP的客户端服务器通信,如何在终端输入数据进行聊天呢,求大神帮我 //clientTcp.c #include #include #include #include #include #include #include #include #define SERVPORT 3333 //侦听端口地址 #define MAXDATASIZE 100 main(int argc,char argv[]) { int sockfd,sendbytes; char buf[MAXDATAS

求大神帮我解决ueditor单图上传按钮显示的问题asp.net

问题描述 求大神帮我解决ueditor单图上传按钮显示的问题asp.net 因为公司项目需要,昨天下载了一个.net版的ueditor富文本编辑器,现在也只是能在页面上显示出来了,还有很多的配置问题没解决,现在的问题是单图上传按钮是灰色的,怎么让它显示?还是多图上传的本地文件上传的配置问题,希望能来个大牛帮我解决一下,最好有个截图解释一下,才刚工作一个月,谢谢了

VS2012无法附加进程,求大神帮解决

问题描述 VS2012无法附加进程,求大神帮解决 解决方案 直接在vs里调试你的asp.net程序

新生 求大神帮帮忙!

问题描述 新生 求大神帮帮忙! 解决方案 求大神帮帮忙 解决方案二: 先看看你的数据库启动了没 解决方案三: 试试: 打开'程序'-'所有程序'-'Microsoft SQL Server 2012 '-'配置工具'-'SQL Server 配置管理器',在弹出的窗体中,找到'SQL Server 2012 网络配置',把'MSSQLSERVER的协议'下的"Named Pipes"和"TCP/IP"启动,然后重新启动Microsoft SQL Server 201

字符串处理-求大神帮解决如下程序,最基本的C语言字符串类型,不用编太难(如下为问题要求,测试用例,输出用例)

问题描述 求大神帮解决如下程序,最基本的C语言字符串类型,不用编太难(如下为问题要求,测试用例,输出用例) Background Given an m by n grid of letters and a list of words, find the location in the grid at which the word can be found. A word matches a straight, uninterrupted line of letters in the grid.

求解释-求大神帮看看这段汇编代码

问题描述 求大神帮看看这段汇编代码 学校课程设计,这段是步进电机的控制代码,用键盘输入,在六位LED七段数码显示管上显示,求大神把下面代码加上注释,实在不行就帮忙看下键盘显示那部分是怎么回事,有重谢. ORG 0A30H ;? MONIT: MOV SP,#50H MOV 7EH,#00H MOV 7DH,#02H MOV R0,#7CH MOV A,#08H MOV R4,#04H MONIT1: MOV @R0,A DEC R0 DJNZ R4,MONIT1 MOV A,#7EH MOV D