日期:2014-05-17  浏览次数:21055 次

socket循环接收二进制判断结束的问题
客户端这边接收的是二进制流,数据中有中文也有英文,结束符是一个随机的字符串。

现在遇到的问题是:循环接收的时候,会把每次接收的字节数组转化字符串,然后累加,然后判断是否包含结束符,包含则循环结束。

但是中文会存在乱码的问题,原因应该是循环接收的字节数组的大小有一定概率的截断了中文字符,转化为字符串的时候就会存在部分乱码的问题。

求解决。

个人想到的是每次累加字节数组,然后整体转化为字符串,再进行判读?请问下有没有什么更好的方法,,或者该方法可行的话,c#中字节数组该如何累加

谢谢。。

------解决方案--------------------
定义一个消息结构,先传总长度,收完再转化字符串
  
*****************************************************************************
签名档: http://feiyun0112.cnblogs.com/
------解决方案--------------------
乱码要么是截断,要么是双方编码不匹配,定义头信息,指明要接受的总长度,循环接受至达到这个数值位置,可以传递byte[],解码时要编码一致
------解决方案--------------------
严重同意楼上二位大神的建议,还是规定数据结构,设置长度的好。
------解决方案--------------------
为什么不用字符串,为什么不用tcpclient
------解决方案--------------------
引用:
客户端这边接收的是二进制流,数据中有中文也有英文,结束符是一个随机的字符串。

现在遇到的问题是:循环接收的时候,会把每次接收的字节数组转化字符串,然后累加,然后判断是否包含结束符,包含则循环结束。

但是中文会存在乱码的问题,原因应该是循环接收的字节数组的大小有一定概率的截断了中文字符,转化为字符串的时候就会存在部分乱码的问题。

求解决。

个人想到的是每次累加字节数组,然后整体转化为字符串,再进行判读?请问下有没有什么更好的方法,,或者该方法可行的话,c#中字节数组该如何累加

谢谢。。


看楼主现在没有规定数据长度,只能通过特定字符判断结束,建议使用List<byte>,可以方便的动态添加,判断结束删除也方便。转换为字符串可以直接转。
------解决方案--------------------
对于未知长度的流,一般都是分段传输。每一段都有 长度+当前段内容+是否结束。