多线程tcp(多线程tcp端口扫描程序)

      最后更新:2022-12-13 22:43:58 手机定位技术交流文章

      如何用C#实现多线程TCP协议的服务器端程序

      用C#实现多线程TCP协议的服务器端程序: // /// Tcp客户线程类(服务端),ThreadServerProcessor 线程产生的客户连接,用该线程读写/// public class ThreadClientProcessor{//Tcp连接实例private TcpClienttcpClient;//消息框,本来想写日志用private System.Windows.Forms.ListBox MessageList;private string Password; //该连接登陆密码private string Cmd1Echo;private string Cmd2Echo;private bool ClientLogOn;//客户是否登陆private bool TcpClose;public ThreadClientProcessor(){}//构造函数,参数解释:Tcp客户,消息框,该服务密码(password命令后的参数) ,命令回应串 1,2 ******************public ThreadClientProcessor(TcpClient client , ListBox listBox,string LogonText ,string cmd1echo,string cmd2echo){ClientList.Add(this);//把当前实例加入一个列表中,方便以后控制this.tcpClient=client;this.MessageList=listBox;this.Password=LogonText;this.Cmd1Echo=cmd1echo;this.Cmd2Echo=cmd2echo;this.ClientLogOn=false;this.TcpClose=false;}public static char[] CmdSplit={' '}; //读来的串由' ' 进行分离,命名+' '+参数//public const string[] Cmd=new string[] { "password","cmd1","cmd2","echo","bye"};//该函数由你自己写,这个只是给一个例子,//功能:命令处理器,给个命令串,返回该命令处理结果,把命令和处理结果放在一个文本文件里,便于系统升级public stringTcpCmd(string s){string result;try{string cmdarg=s.Trim();string[] args=cmdarg.Split(CmdSplit);string cmd=args[0].ToLower();switch(cmd ){case "password" :if (args.Length>1){ClientLogOn= Password.Equals(args[1].Trim());result=ClientLogOn? "登陆成功":"密码不正确,未登陆";}else result= "登陆时候,没有输入密码";break;case "cmd1":result=ClientLogOn?this.Cmd1Echo:"该命令无权执行,请先登陆";break;case "cmd2":result=ClientLogOn?this.Cmd2Echo:"该命令无权执行,请先登陆";break;case "echo":result=string.Format("服务器回应:n {0}",s);break;case "bye":this.TcpClose=true;result="DisConnected";break;default:result="不可识别的命令";break;}}catch{result="解析命令发生错误,你输入的是狗屁命令,TMD*^* ";}return result;} //end cmd//定义一个线程,该线程对应的函数是 void start()(不是Start())********************************//一下程序主要是操作该线程public System.Threading.Thread tcpClientThread;//启动客户连接线程 *************************************************************publicvoid Start(){tcpClientThread=new Thread(new ThreadStart(start));tcpClientThread.Priority=ThreadPriority.BelowNormal;tcpClientThread.Start();}//断开该当前实例连接,终止线程 **************************************************************public void Abort(){if (this.tcpClientThread!=null){//tcpClientThread.Interrupt();tcpClientThread.Abort();//一定要等一会儿,以为后边tcpClient.Close()时候,会影响NetWorkStream的操作Thread.Sleep(TimeSpan.FromMilliseconds(100));tcpClient.Close();}}//静态列表,包含了每个连接实例(在构造实例时候使用了 ArrayList.Add( object))private static System.Collections.ArrayList ClientList=new ArrayList();//断开所有的Tcp客户连接,静态方法*************************************************************public static void AbortAllClient(){for(int j=0 ;j< ClientList.Count;j++){//从实例列表中取一个对象,转化为ThreadClientProcessor对象ThreadClientProcessor o=(ThreadClientProcessor ) ClientList[j];//调用ThreadClientProcessor 对象的停止方法o.Abort();}//清除连接列表ClientList.Clear();}//读写连接的函数,用于线程//*******************************************************************privatevoidstart(){byte[] buf=new byte[1024*1024]; //预先定义1MB的缓冲int Len=0; //流的实际长度NetworkStream networkStream=tcpClient.GetStream(); //建立读写Tcp的流try{byte[] p=Encoding.UTF8.GetBytes(" 欢迎光临,请输入密码" );//向Tcp连接写 欢迎消息if (!this.ClientLogOn )networkStream.Write(p,0,p.Length);//开始循环读写tcp流while (!TcpClose){//如果当前线程是在其它状态,(等待挂起,等待终止.....)就结束该循环if (Thread.CurrentThread.ThreadState!=ThreadState.Running)break;//判断Tcp流是否有可读的东西if ( networkStream.DataAvailable){//从流中读取缓冲字节数组Len=networkStream.Read(buf,0,buf.Length);//转化缓冲数组为串string cmd=Encoding.UTF8.GetString(buf,0,Len);this.MessageList.Items.Add("客户机:"+cmd);//处理该缓冲的串(分析命令),分析结果为res串string res=TcpCmd(cmd);//把命令的返回结果res 转化为字节数组byte[]result=Encoding.UTF8.GetBytes(res);//发送结果缓冲数组给客户端networkStream.Write(result,0,result.Length);this.MessageList.Items.Add("服务器回应:"+res);}else{//Thread.Sleep(TimeSpan.FromMilliseconds(200d));//this.MessageList.Items.Add("客户机无命令");//如果当前Tcp连接空闲,客户端没有写入,则当前线程停止200毫秒Thread.Sleep(TimeSpan.FromMilliseconds(200d));} }
      如何用C#实现多线程TCP协议的服务器端程序

      TCP和UDP中怎么加入多线程、多进程?

      线程是计算机任务执行的最小单位,多线程也就是说一台计算机同时可以干好几件事,例如同时打字和听音乐,而单线程就是打字时只能打字,其他的干不了。 udp和tcp是两种协议,网络协议是分层的,他们都是传输层协议。所以协议就是一组约定的规则,没有规矩不成方圆嘛。
      如何评价王者荣耀中加入的多线程优化模式? 《王者荣耀》在开启多线程模式后,游戏流畅度会有大幅提升,能够有效提升团战时的帧率,为各位召唤师提供更平滑、更流畅的游戏体验。
      1、UDP UDP(User Datagram Protocol,用户数据报协议)不提供复杂的控制机制,利用IP提供面向无连接的通信服务。它是将应用程序发来的数据在收到的那一刻,立即按照原样发送到网络上的一种机制。UDP的特点UDP是一个非连接的协议,传输数据之前,源端和终端不建立连接,当它想传送时就简单地去抓取来自应用程序的数据,并尽可能快地把它扔到网络上。在发送端,UDP传送数据的速度仅仅是受应用程序生成数据的速度、计算机的能力和传输带宽的限制;在接收端,UDP把每个消息段放在队列中,应用程序每次从队列中读一个消息段;由于传输数据不建立连接,因此也就不需要维护连接状态,包括收发状态等,因此一台服务机可同时向多个客户机传输相同的消息;UDP信息包的标题很短,只有8个字节,相对于TCP的20个字节信息包的额外开销很小;UDP使用尽最大努力交付,即不保证可靠交付,因此主机不需要维持复杂的链接状态表(有许多参数);UDP是面向报文的。发送方的UDP对应用程序交下来的报文,在添加首部后就向下交付给IP层。既不拆分,也不合并,而是保留这些报文的边界,因此,应用程序需要选择合适的报文大小。2、TCPTCP(Transmission Control Protocol,传输控制协议)是面向连接的协议,也可是说是对“传输、发送、通信”进行“控制”的协议。TCP作为一种面向有连接的协议,只有在确认通信对端存在时才会发送数据,从而可以控制通信流量的浪费。且TCP实现了数据传输时各种控制功能,可以进行丢包时的重发控制,还可以对次序乱掉的分包进行顺序控制。TCP通过检验和、序列号、确认应答、重发控制、连接管理以及窗口控制等机制实现可靠性传输。TCP与UDP的区别TCP面向连接(如打电话要先拨号建立连接)。UDP是无连接的,即发送数据之前不需要建立连接;TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达。UDP尽最大努力交付,即不保证可靠交付;TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流。UDP是面向报文的;每一条TCP连接只能是点到点的。UDP支持一对一、一对多、多对一和多对多的交互通信;对系统资源的要求TCP较多,UDP少。TCP首部开销20字节,UDP的首部开销小,只有8个字节;TCP的逻辑通信信道是全双工的可靠信道。UDP则是不可靠信道。TCP建立连接的3次握手过程主机A通过向主机B发送一个含有同步序列号的标志位的数据段给主机B,向主机B请求建立连接,通过这个数据段,主机A告诉主机B两件事:我想要和你通信;你可以用哪个序列号作为起始数据段来回应我;主机B收到主机A的请求后,用一个带有确认应答(ACK)和同步序列号(SYN)标志位的数据段响应主机A,也告诉主机A两件事:我已经收到你的请求了,你可以传输数据了;你要用哪个序列号作为起始数据段来回应我;主机A收到这个数据段后,再发送一个确认应答,确认已收到主机B的数据段:“我已收到回复,我现在要开始传输实际数据了”。这样3次握手就完成了,主机A和主机B就可以传输数据了。TCP断开连接的4次确认当主机A完成数据传输后,将控制位FIN置1,提出停止TCP连接的请求;主机B收到FIN后对其作出响应,确认这一方向上的TCP连接将关闭,将ACK置1;由B端再提出反方向的关闭请求,将FIN置1;主机A对主机B的请求进行确认,将ACK置1,双方向的关闭结束。由TCP的3次握手和4次断开确认可以看出,TCP使用面向连接的通信方式,大大提高了数据通信的可靠性,使发送数据端和接收端在数据正式传输前就有了交互,为数据正式传输打下了可靠的基础。 我们经常使用“ping”命令来测试两台主机之间TCP/IP通信是否正常,其实“ping”命令的原理就是向对方主机发送UDP数据包,然后对方主机确认收到数据包,如果数据包是否到达的消息及时反馈回来,那么网络就是通的。
      TCP和UDP中怎么加入多线程、多进程?

      求助大神,QT多线程实现TCP通信

      QT界面中,点击开始键。 开启thread线程,建立TCP连接。 并在主线程中运行thread对象中的sendData函数,实现TCP发送数据。
      求助大神,QT多线程实现TCP通信

      TCP多线程异常报错java.net.ConnectException: Connection refused: connect

      看下对应端口的服务,有并发量的限制吧
      TCP多线程异常报错java.net.ConnectException: Connection refused: connect

      Java的多线程和网络UDP和TCP怎么理解?它们有什么联系?

      线程是计算机任务执行的最小单位,多线程也就是说一台计算机同时可以干好几件事,例如同时打字和听音乐,而单线程就是打字时只能打字,其他的干不了。 udp和tcp是两种协议,网络协议是分层的,他们都是传输层协议。所以协议就是一组约定的规则,没有规矩不成方圆嘛。
      这只是两种不同的网络协议而已,QQ聊天之类常用UDP,而网络连接常用TCP,相对而言TCP比较安全。
      Java的多线程和网络UDP和TCP怎么理解?它们有什么联系?

      本文由 在线网速测试 整理编辑,转载请注明出处,原文链接:https://www.wangsu123.cn/news/47464.html

          热门文章

          文章分类