帮忙解决一下socket丢包问题

爱coding 发布于 2013/02/19 14:46
阅读 2K+
收藏 1
帮忙分析socket传输在windows之间传输不丢包,在linux和windows传输偶尔丢包,神马问题呢???
加载中
0
xiaoxia
xiaoxia

你的信息量太少了。

0
爱coding
爱coding
@xiaoxia  PrintStream out = new PrintStream(clientSocket.getOutputStream());
            //接受数据,但不允许有中文,因为会乱码
            DataInputStream in=new DataInputStream(clientSocket.getInputStream());
            byte[] buffer = new byte[10000];  //缓冲区的大小
            in.read(buffer);               //处理接收到的报文,转换成字符串
            /**
             * C++传递过来的中文字,需要转化一下。C++默认使用GBK。
             * GB2312是GBK的子集,只有简体中文。因为数据库用GB2312,所以这里直接转为GB2312
             * */
          String  message = new String(buffer, "GB2312").trim();

这里服务器得到的字符串比客户端传过来的少很多,这个字符串是一段文本,挺多的一段(1000多字吧),有时候发送的快了,服务端就不能全部拿到,有时候可以。。
0
xiaoxia
xiaoxia

你这代码有问题,和linux平台无关。你只接收了一次对方的输出in.read(buffer); ,如果对方发送多次的话你接收的肯定不完整了。

0
ExtremeTalk
ExtremeTalk
一个一个byte的read, 或者用available()判断是否完成了,没完成继续read
0
itian277
itian277
这叫做 粘包
0
dake
dake
UDP正常..

TCP是粘包..

0
爱coding
爱coding
这个问题解决了啊,最后还是用xsocket解决的,无阻塞的socket,多谢大家伙儿。。。。
0
lvwenwen
lvwenwen
socket 丢包问题
返回顶部
顶部