UDP和TCP传输混乱,需要转为TCP的,求解?

问题描述

服务端:namespaceControl_Client{publicpartialclassMain_Form:Form{#region全局变量部分TcpClientClient;TcpListenerLis;NetworkStreamStream;Socketsocket;SocketLis_socket;StringLocalDisk_List="$GetDir||";StringOnline_Order="$Online||";StringProcess_List="$GetProcess||";UdpClientUDP_Client=newUdpClient();publicdelegatevoidPt();#endregion#region命令处理函数publicvoidOrder_Catcher(String[]Order_Set){switch(Order_Set[0]){case"$Return":switch(Order_Set[1]){case"#Online_OK":this.Online_OK();break;}break;case"$GetProcess":this.Get_Process();break;case"$KillProcess":this.Kill_Process(Order_Set[1]);break;try{using(NetworkStreamNs=newNetworkStream(this.Lis_socket)){Ns.Write(Encoding.Default.GetBytes("$ActiveHDC||True"),0,Encoding.Default.GetBytes("$ActiveHDC||True").Length);Ns.Flush();}this.UDP_Client.Connect(Globle.Host,Globle.UDP_Port);if(this.UDP_Client.Client.Connected){}}catch(Exceptionex){MessageBox.Show("尝试发送激活HDC信息失败:"+ex.Message);}break;case"$ShutDown":DoExitWin(1);break;case"$LogOut"://MessageBox.Show("Logout");DoExitWin(0);break;}}主控端:namespace主控端{publicpartialclassMain_Form:Form{publicdelegatevoidPt();TcpListenerLis;Socketsocket;Type_Clienttc=null;StringRemove_Ip="";publicMain_Form(){InitializeComponent();}publicvoidListen_Port(){Lis=newTcpListener(IPAddress.Any,Globle.Port);this.Sys_Icon.ShowBalloonTip(5000,"端口监听成功","端口["+Globle.Port+"]监听成功!r等待主机上线......",ToolTipIcon.Info);while(Globle._IsListen_Port){try{Lis.Start();this.Program_State.Text="["+Globle.Port+"]"+"端口监听成功...";this.BeginInvoke(newPt(this.Change_Label_Color_Green));}catch(Exceptionex){this.Program_State.Text="监听端口"+Globle.Port+"失败....";this.BeginInvoke(newPt(this.Change_Label_Color_Red));}try{this.socket=Lis.AcceptSocket();while(Globle._IsResvice_Message){using(NetworkStreamns=newNetworkStream(this.socket)){try{byte[]bb=newbyte[1024];intRes_Len=ns.Read(bb,0,bb.Length);String[]Order_Set=Encoding.Default.GetString(bb,0,Res_Len).Split(newString[]{"||"},StringSplitOptions.RemoveEmptyEntries);this.Order_Catcher(Order_Set);}catch(Exceptionex){};}}}catch(Exceptionex){//MessageBox.Show("监听成功后出现错误:"+ex.Message);}}}privatevoidMain_Form_Load(objectsender,EventArgse){Threadthread=newThread(newThreadStart(this.Listen_Port));thread.Start();}publicvoidOrder_Catcher(String[]Order_Set){switch(Order_Set[0]){case"$Online":this.Online(Order_Set);break;case"$OffLine":this.OffLine(Order_Set[1]);break;}}publicvoidOnline(String[]Order_Set){Type_Clienttc=newType_Client();tc.Ip=((IPEndPoint)this.socket.RemoteEndPoint).Address.ToString();tc.Software=Order_Set[1];tc.Computer_Name=Order_Set[2];tc.Customer=Order_Set[3];tc.System_Info=Order_Set[4];tc.Cpu=Order_Set[5];tc.Memory=Order_Set[6];tc.Socket=this.socket;if(tc.Software=="专用版本"){this.tc=tc;this.BeginInvoke(newPt(this.reFlush_OnlineList));}using(NetworkStreamNs=newNetworkStream(tc.Socket)){Ns.Write(Encoding.Default.GetBytes("$Return||#Online_OK"),0,Encoding.Default.GetBytes("$Return||#Online_OK").Length);Ns.Flush();}Globle.Online_Number++;}publicvoidOffLine(StringIp){for(inti=0;i<Globle.Online_Computer_Attr.Count;i++){if(Globle.Online_Computer_Attr[i].Ip==Ip){Globle.Online_Computer_Attr.Remove(Globle.Online_Computer_Attr[i]);break;}}this.Remove_Ip=Ip;this.BeginInvoke(newPt(this.Remove_ListView_Computer));}publicvoidRemove_ListView_Computer(){for(inti=0;i<this.Nomarl_Member.Items.Count;i++){if(this.Nomarl_Member.Items[i].Text.Trim()==this.Remove_Ip.Trim()){this.Nomarl_Member.Items[i].Remove();break;}}Globle.Online_Number--;this.Customer_Online_Info.Items.Add(this.Remove_Ip,"主机:"+this.Remove_Ip+"下线成功!",0);this.OnLine_Counter.Text=""+(int.Parse(this.OnLine_Counter.Text)-1);}privatevoidMain_Form_FormClosing(objectsender,FormClosingEventArgse){Environment.Exit(0);}publicvoidChange_Label_Color_Red(){this.Program_State.ForeColor=Color.Red;}publicvoidChange_Label_Color_Green(){this.Program_State.ForeColor=Color.Green;}publicvoidreFlush_OnlineList(){boolFlag=false;for(inti=0;i<Globle.Online_Computer_Attr.Count;i++){if(Globle.Online_Computer_Attr[i].Ip==tc.Ip){Flag=true;break;}}if(!Flag){Globle.Online_Computer_Attr.Add(tc);this.Nomarl_Member.Items.Add(this.tc.Ip,this.tc.Ip,0);this.Nomarl_Member.Items[this.tc.Ip].SubItems.Add(this.tc.Software);this.Nomarl_Member.Items[this.tc.Ip].SubItems.Add(this.tc.Computer_Name);this.Nomarl_Member.Items[this.tc.Ip].SubItems.Add(this.tc.Customer);this.Nomarl_Member.Items[this.tc.Ip].SubItems.Add(this.tc.System_Info);this.Nomarl_Member.Items[this.tc.Ip].SubItems.Add(this.tc.Cpu);this.Nomarl_Member.Items[this.tc.Ip].SubItems.Add(this.tc.Memory);this.Customer_Online_Info.Items.Add(this.tc.Ip,"主机:"+this.tc.Ip+"上线了!",1);if(this.tc.Customer!=""){this.Customer_Online_Info.Items[this.tc.Ip].SubItems.Add(this.tc.Customer);}else{this.Customer_Online_Info.Items[this.tc.Ip].SubItems.Add("[没有备注]");}this.Sys_Icon.ShowBalloonTip(5000,"有主机上线啦!","主机:"+tc.Ip+"上线啦",ToolTipIcon.Info);this.OnLine_Counter.Text=Globle.Online_Number.ToString();}}privatevoidbutton5_Click(objectsender,EventArgse){if(this.Nomarl_Member.SelectedItems.Count>0){StringIp=this.Nomarl_Member.SelectedItems[0].Text.Trim();for(inti=0;i<Globle.Online_Computer_Attr.Count;i++){if(Globle.Online_Computer_Attr[i].Ip==Ip){Process_ManagerPM=newProcess_Manager(Ip,this);PM.Show();}}}}

解决方案

本帖最后由 oyljerry 于 2011-12-31 17:38:24 编辑
解决方案二:
需要耐心看!
解决方案三:
看完了给我解释一下就更好了

时间: 2024-11-01 06:22:45

UDP和TCP传输混乱,需要转为TCP的,求解?的相关文章

Java实现Socket的TCP传输实例

  本文实例讲述了Java实现Socket的TCP传输.分享给大家供大家参考.具体分析如下: 客户端发数据到服务端 * Tcp传输,客户端建立的过程. * 1,创建tcp客户端socket服务.使用的是Socket对象. * 建议该对象一创建就明确目的地.要连接的主机. * 2,如果连接建立成功,说明数据传输通道已建立. * 该通道就是socket流 ,是底层建立好的. 既然是流,说明这里既有输入,又有输出. * 想要输入或者输出流对象,可以找Socket来获取. * 可以通过getOutput

Java实现Socket的TCP传输实例_java

本文实例讲述了Java实现Socket的TCP传输.分享给大家供大家参考.具体分析如下: 客户端发数据到服务端 * Tcp传输,客户端建立的过程. * 1,创建tcp客户端socket服务.使用的是Socket对象. * 建议该对象一创建就明确目的地.要连接的主机. * 2,如果连接建立成功,说明数据传输通道已建立. * 该通道就是socket流 ,是底层建立好的. 既然是流,说明这里既有输入,又有输出. * 想要输入或者输出流对象,可以找Socket来获取. * 可以通过getOutputSt

TCP传输小数据包效率问题

当Microsoft TCP栈接收到一个数据包时,会启动一个200毫秒的计时器.当ACK确认数据包发出之后,计时器会复位,接收到下一个数据包时,会再次启动200毫秒的计时器.为了提升应用程序在内部网和Internet上的传输性能,Microsoft TCP栈使用了下面的策略来决定在接收到数据包后什么时候发送ACK确认数据包:1.如果在200毫秒的计时器超时之前,接收到下一个数据包,则立即发送ACK确认数据包.2.如果当前恰好有数据包需要发给ACK确认信息的接收端,则把ACK确认信息附带在数据包上

JAVA之旅(三十三)——TCP传输,互相(伤害)传输,复制文件,上传图片,多并发上传,多并发登录

JAVA之旅(三十三)--TCP传输,互相(伤害)传输,复制文件,上传图片,多并发上传,多并发登录 我们继续网络编程 一.TCP 说完UDP,我们就来说下我们应该重点掌握的TCP了 TCP传输 Socket和ServiceSocket 建立客户端和服务端 建立连接后,通过Socket中的IO流进行数据的传输 关闭Socket 同样的,我们的客户端和服务端都是两个独立的应用 我们通过查阅API文档发现,该对象在建立的时候,就可以去连接指定主机,因为tcp是面向连接的,所以在建立socket服务时,

golang中解决tcp传输中的粘包问题

golang中解决tcp传输中的粘包问题 Author: 岳东卫 Email: usher.yue@gmail.com 什么是粘包? 最近在写https://github.com/UsherYue/ActivedRouter (一个http/https反向代理服务)的时候遇到了粘包问题, 如果有做过网络编程的小伙伴应该都知道粘包问题,举个例子: 比如客户端在和服 务器进行通信采用的是json格式的数据包.那么此时Client和Server的数据交互流程应该如下: Client Send Json

我的WCF开发框架简化版及基于NET.TCP传输方式的实现

前面介绍很多关于我的WCF开发框架的文章,前面的介绍思路,主要是基于一个整个仓库管理系统来进行整体介绍的,本来另辟蹊径,着重介绍一个备件信息的表的在我的WCF开发框架中,各层是如何体现的,通过简单的一个表的操作,走完一个WCF开发过程,着重介绍一个对象类,如何实现整个wcf的应用.另外穿插介绍如何基于net.tcp传输方式实现wcf的应用,以及使用这种方式需要注重的地方等功能模块的介绍. 我们先来看看我的WCF开发框架整体架构设计图.   上图中,值得注意的是,WCF服务层,可以Host(寄宿)

.NET下可复用的TCP通信层实现之TCP组件

    2006年已经来临,回首刚走过的2005,心中感慨万千.在人生和生活的目标上,有了清晰明确的定位,终于知道了自己喜欢什么样的生活,喜欢什么样的生活方式:在技术上,成熟了不少,眼界也开阔的不少,从面向对象到组件.从.Net到J2EE.从微软到开源,颇有收获.特别值得一提的是,认识了Rod Johnson这个大牛人,也终于在自己的项目中正式使用Spring.net框架来开发了,这确实是一个优秀的框架.而在已经到来的2006年,我有一个主要目标就是B/S应用开发,来填补自己在企业级开发上的另一

TCP实现P2P通信、TCP穿越NAT的方法、TCP打洞

这个标题用了两个顿号三个名称,其实说得是同一个东西,只是网上有不同的说法罢了,另外好像还有人叫TCP打孔(我的朋友小妞听说后问"要打孔啊,要不要我帮你去借个电钻过来啊?""~!·¥%--·!"). 闲话少说,我们先看一下技术背景: Internet的迅速发展以及IPv4 地址数量的限制使得网络地址翻译(NAT,Network Address Trans2lation)设备得到广泛应用.NAT设备允许处于同一NAT后的多台主机共享一个公网(本文将处于同一NAT后的网络

acl-ip 、tcp source,ip、tcp destination有什么区别呢?

问题描述 ip .tcp source,ip.tcp destination有什么区别呢? ip source .tcp source. ip destination.tcp destination有什么区别呢? 例如: rule permit ip source 59.37.159.205 0 rule permit tcp source 59.37.159.205 0 rule permit tcp destination 59.37.159.205 0 rule permit ip des