C/S程序中,客户端接收二进制内存流如何释放?急求...

问题描述

C/S程序中,我在客户端接收服务器端发来的MemoryStream数据。定义://获取网络流NetworkStreamnetworkStream=client.GetStream();//将网络流作为二进制读写对象br=newBinaryReader(networkStream);调用线程:privatevoidReceiveData(){stringreceiveString=null;while(isExit==false)//进入循环接收{try{receiveString=br.ReadString();}catch{}string[]splitString=receiveString.Split(',');//服务器端发送bw.write("file,"+file.length);分割出命令,进入switchstringcommand=splitString[0].ToLower();switch(command){case"login"://格式:login,用户名//AddOnline(splitString[1]);break;case"file":MemoryStreamms=newMemoryStream();....Client.Receive(buffer_ms);.....ms.Write(buffer_ms,0,received_len_ms);break;.....}以上将ms通过线程调用,最后Disposed();成功释放。但是在本机测试的时候,服务器端循环间隔10ms向客户端发送内存流,客户端和服务器端在同一台机子上运行正常。但分开来个机子的话,客户端接收不到1s就停止,看任务管理器中,客户端进程的内存在逐渐上升,通过调试,好像在上面的br.ReadString();中的br对象没有释放,但在case"file":代码段中加入br.Dispose();客户端就掉线了,哪位高手知道怎么正确释放该br对象啊?????急急急...感谢感谢

解决方案

解决方案二:
是不是高手还没起床呢啊?
解决方案三:
跟br.Dispose关系不大。一个可能是你服务端的收发规则和客户端不一致。比如客户端只用BinaryReader.ReadString(),但服务端却混合不同的发送(有时发字符串,有时发数据)。
解决方案四:
是不是高手还没起床呢啊?
解决方案五:
//将网络流作为二进制读写对象br=newBinaryReader(networkStream);这东西不是这么用的呀汗privatevoidReceiveData(){stringreceiveString=null;while(isExit==false)//进入循环接收{try{receiveString=br.ReadString();你这里循环Read第二个ReadString()后就异常了因为他的指针到流尾如果没数据就异常了,这个不是阻塞线程,BinaryReader只能一次性用,不能复用。每次都要NEW}catch{}
解决方案六:
引用4楼wyd1520的回复:

//将网络流作为二进制读写对象br=newBinaryReader(networkStream);这东西不是这么用的呀汗privatevoidReceiveData(){stringreceiveString=null;while(isExit==false)//进入循环接收{try{receiveString=br.ReadString();你这里循环Read第二个ReadString()后就异常了因为他的指针到流尾如果没数据就异常了,这个不是阻塞线程,BinaryReader只能一次性用,不能复用。每次都要NEW}catch{}

那怎么用正确啊?求正确方法啊.....我理解的不深..
解决方案七:
TCP通信,你要取到这个包所有的Byte 然后再把这个Byte[]入到BinaryReader(byte[])然后ReadString(),一个通信包只能用一个BinaryReader..每次都要重新NEW。你要搞这个TCP通信,你先要学会这个文章http://www.cnblogs.com/xiaozhi_5638/p/4244797.html
解决方案八:
引用4楼wyd1520的回复:

//将网络流作为二进制读写对象br=newBinaryReader(networkStream);这东西不是这么用的呀汗privatevoidReceiveData(){stringreceiveString=null;while(isExit==false)//进入循环接收{try{receiveString=br.ReadString();你这里循环Read第二个ReadString()后就异常了因为他的指针到流尾如果没数据就异常了,这个不是阻塞线程,BinaryReader只能一次性用,不能复用。每次都要NEW}catch{}

那怎么用正确啊?求正确方法啊.....我理解的不深..

时间: 2024-09-21 04:17:27

C/S程序中,客户端接收二进制内存流如何释放?急求...的相关文章

datasocket中怎样实现服务器和客户端的双向实时传输啊,急求各位大侠指点

问题描述 datasocket中怎样实现服务器和客户端的双向实时传输啊,急求各位大侠指点!!!!

内存泄露-内存溢出怎么解决,急求啊,求加QQ帮忙谢谢了

问题描述 内存溢出怎么解决,急求啊,求加QQ帮忙谢谢了 在这里谢谢各位大神了,小弟QQ704532683,谢谢了

PHP中如何接收二进制流并生成文件

PHP接收二进制流并生成文件的代码 <?php /** 二进制流生成文件 * $_POST 无法解释二进制流,需要用到 $GLOBALS['HTTP_RAW_POST_DATA'] 或 php://input * $GLOBALS['HTTP_RAW_POST_DATA'] 和 php://input 都不能用于 enctype=multipart/form-data * @param String $file 要生成的文件路径 * @return boolean */ function bin

C#WPF程序中如何接收和发送PB exe程序返回的值

问题描述 1.打开PB程序窗体privatevoidbuttonCtrl_Pay_Click(objectsender,RoutedEventArgse){IntPtrmyPtr=GetForegroundWindow();Stringpath=@"C:ProgramFileseyeah_memberconsume_io.exe";Processpro=newProcess();pro.StartInfo.FileName=path;pro.StartInfo.Arguments=&q

打包成jar后程序里的post请求返回参数不全,急求

问题描述 我有个java程序,本地运行没问题,但是打包成jar包调用时程序里面的post请求返回的参数会不全,而本地直接跑时正常的,大神们,急求原因 解决方案

求邮件正文中内嵌图片的显示问题,急求。

问题描述 我用C#做了JMAIL收取邮件,但对于正文中带的图片直接显示cid:A2CDCAD8@470E1812.45981B54.JPG,有什么办法把这CID的址址换成html的明文地址呀.查了很多资料,都没有,不知有人解决了没有. 解决方案 解决方案二:看看这个里面的链接吧解决方案三:引用1楼wangnaisheng的回复: 看看这个里面的链接吧 大虾的这些东西我都仔细看了,一般是说怎么发出去内嵌图邮件,没有说到怎么去处理接受邮件显示问题.我也了解到可能要用正则表达式把CID译过来,但不知怎

JEE程序 怎么把接收到的url参数 如数的转发到另一个程序中

问题描述 比username=ss,在我的程序中可以接收这个参数是没有问题的,怎么把这个参数发送给另一个web程序?只能通过httpclient重新拼接参数吗? 问题补充:跟这个附件是没有任何关系的 解决方案 这种情况下 有两种方案,1 一个是在客户端用ajax去做.可以发送两个ajax请求,参数组装成json,参数的组装不是很麻烦.2 在服务器端用httpClient或类似的功能,httpClient,也不用拼接字符串,可以使用NameValuePair类,进行参数的封装.解决方案二:/**

linux下某程序中实现对进程的实时流量监控功能

问题描述 linux下某程序中实现对进程的实时流量监控功能 求大牛赐教 现在开发了一个程序,在linux下跑,想在里面加一个对特定进程的网络流量监控,实时统计进程流量大小 现在想到的办法就是用libpcap库,对应/proc里面文件按照pid 端口号 数据包 数据大小 进行统计得出当前流量大小. 目前有如下问题: 1.程序中已有功能中已经使用了libpcap去抓去一段数据包然后输出libpcap文件,如果按照上述办法,会不会造成再用libpcap采集数据包出问题?或者说libpcap可不可以多次

编写Socket客户端和服务器程序,客户端读取本地文件的数据,发送到服务器,服务器接收并存储到文件中。

问题描述 2.编写Socket客户端和服务器程序,客户端读取本地文件的数据,发送到服务器,服务器接收并存储到文件中.消息格式:字段长度(单位字节)内容--------------------------------------------------------------------len8整个消息长度,不包括这4个字节,类型为longfile_name_length1文件名长度,bytefile_namefile_name_length文件名,Stringdata_length8文件数据长度