`

Java socket编程客户端读取数据不完整

阅读更多
今天在用java socket读取服务器端发送的数据时,发现只能读取服务器端发送的部分数据,无法完整读取服务器端的数据。数据大概有7W多个字节。

原代码如下:
    private String getSocketDCCReceiveCCA() throws IOException{
InputStream stream=socket.getInputStream();
byte[] rb = new byte[8];
socket.getInputStream().read(rb);
                  //前8个字节是整个xml数据的长度(十六进制)
int rLen =b2i(rb);
Log.info("转换后的rLen长度为:"+rLen);
byte[] read = new byte[rLen - 8];
                  //一次性读取数据的长度(这里有7W多个字节)
socket.getInputStream().read(read);
                  //对数据进行编码转换
String re = new String(CheckUnicodeString(read), "UTF-8");
                  return re;
         }


请各位帮忙看看,为什么服务器端返回的字符串有7W多个,而我这边只接收到几千个字节。



=============================================================================

完整读取socket返回值的方法:

private String getSocketDCCReceiveCCA() throws IOException{
InputStream stream=socket.getInputStream();
byte[] rb = new byte[8];
socket.getInputStream().read(rb);
Log.info("rb1==="+new String(rb));
int rLen =b2i(rb);
Log.info("after change rLen.length=:"+rLen);

StringBuffer stringBuffer=new StringBuffer();
byte[] c; 
int i=0; //每次实际读取的字节数
int count=0; //已经读取的字节数
c=new byte[rLen-count];
i=socket.getInputStream().read(c);
//Log.info("打印i的值="+i);
count=count+i;
//Log.info("打印count的值="+count);
//总的字节数减去已经读取的字节数就是下次要读取的字节数
//Log.info("打印数组c的值=="+new String(c).trim());
stringBuffer.append(new String(c,0,i,"UTF-8").trim());
while(count!=(rLen-8)){
//继续读取字节
c=new byte[rLen-count];
i=socket.getInputStream().read(c);
//Log.info("循环打印i的值="+i);
count=count+i;
//Log.info("循环打印count的值="+count);
stringBuffer.append(new String(c,0,i,"UTF-8").trim());
//Log.info("循环打印数组c的值="+new String(c).trim());
}

Log.info("新的方式得到的字符串为:"+stringBuffer.toString());
//return new String(CheckUnicodeString(stringBuffer.toString().getBytes()),"UTF-8");
return stringBuffer.toString();

}
分享到:
评论

相关推荐

    单线程Socket编程实现mysql数据读取

    Socket客户端通过Socket服务器读取mysql数据库中的一条记录。

    socket服务器和客户端

    1、 使用socket网络编程技术,创建服务器端和客户端。 2、 创建User类,设置属性userName,userPwd。创建User.xml用户保存用户的用户名和 密码。 3、 客户登录,客户端从键盘输入登陆的用户名密码,通过scoket将...

    Socket编程实验报告.docx

    实验报告 实验一 Socket编程 一、实验目的 通过socket程序的编写、调试,掌握socket编程的基本方法,了解客户端与服务器端的特点,掌握并熟悉运用socket类与ServerSocket类。 实验内容 学习socket编程使用的类和接口...

    使用Java的网络编程实现一个简单的文件传输系统.txt

    在一个while循环中,不断从客户端读取数据并写入到文件中,直到读取完毕。最后关闭客户端的Socket连接。 整个程序通过这些方法来实现文件传输功能,并将文件保存到指定路径下。可以通过修改FILE_PATH常量来指定不同...

    基础深化和提高-网络编程

    Socket编程:基于Socket套接字,通过TCP或UDP协议进行网络通信。通过创建Socket对象,程序可以在网络上进行数据传输和通信。 URL和URLConnection:Java提供了java.net.URL和java.net.URLConnection等类,用于访问...

    42道Java网络编程相关面试题含答案(很全)

    Socket编程:Socket是Java中实现网络通信的基础类。通过Socket类,可以实现基于TCP和UDP协议的网络通信。TCP是一种面向连接的协议,提供了可靠的通信服务;而UDP是无连接的协议,不保证消息的可靠传输。 ...

    Java网络编程(第三版)中文版.part09.rar

    《Java网络编程》不仅仅是对API的解释:它还展示了如何使用API。本书有很多示例,包含了几千行可以实际工作的代码(所有代码都可以在线获得),实现了功能完整的网络客户端和服务器。无论是希望编写特殊用途的web...

    JAVA上百实例源码以及开源项目

     Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...

    Java网络编程(第三版)中文版.part11.rar

    《Java网络编程》不仅仅是对API的解释:它还展示了如何使用API。本书有很多示例,包含了几千行可以实际工作的代码(所有代码都可以在线获得),实现了功能完整的网络客户端和服务器。无论是希望编写特殊用途的web...

    Java网络编程(第三版)中文版.part06.rar

    《Java网络编程》不仅仅是对API的解释:它还展示了如何使用API。本书有很多示例,包含了几千行可以实际工作的代码(所有代码都可以在线获得),实现了功能完整的网络客户端和服务器。无论是希望编写特殊用途的web...

    Java网络编程(第三版)中文版.part07.rar

    《Java网络编程》不仅仅是对API的解释:它还展示了如何使用API。本书有很多示例,包含了几千行可以实际工作的代码(所有代码都可以在线获得),实现了功能完整的网络客户端和服务器。无论是希望编写特殊用途的web...

    Java网络编程(第三版)中文版.part01.rar

    《Java网络编程》不仅仅是对API的解释:它还展示了如何使用API。本书有很多示例,包含了几千行可以实际工作的代码(所有代码都可以在线获得),实现了功能完整的网络客户端和服务器。无论是希望编写特殊用途的web...

    Java网络编程(第三版)中文版.part03.rar

    《Java网络编程》不仅仅是对API的解释:它还展示了如何使用API。本书有很多示例,包含了几千行可以实际工作的代码(所有代码都可以在线获得),实现了功能完整的网络客户端和服务器。无论是希望编写特殊用途的web...

    Java网络编程(第三版)中文版.part02.rar

    《Java网络编程》不仅仅是对API的解释:它还展示了如何使用API。本书有很多示例,包含了几千行可以实际工作的代码(所有代码都可以在线获得),实现了功能完整的网络客户端和服务器。无论是希望编写特殊用途的web...

    Java网络编程(第三版)中文版.part04.rar

    《Java网络编程》不仅仅是对API的解释:它还展示了如何使用API。本书有很多示例,包含了几千行可以实际工作的代码(所有代码都可以在线获得),实现了功能完整的网络客户端和服务器。无论是希望编写特殊用途的web...

    Java网络编程(第三版)中文版.part10.rar

    《Java网络编程》不仅仅是对API的解释:它还展示了如何使用API。本书有很多示例,包含了几千行可以实际工作的代码(所有代码都可以在线获得),实现了功能完整的网络客户端和服务器。无论是希望编写特殊用途的web...

    Java网络编程(第三版)中文版.part13.rar

    《Java网络编程》不仅仅是对API的解释:它还展示了如何使用API。本书有很多示例,包含了几千行可以实际工作的代码(所有代码都可以在线获得),实现了功能完整的网络客户端和服务器。无论是希望编写特殊用途的web...

    Java网络编程(第三版)中文版.part05.rar

    《Java网络编程》不仅仅是对API的解释:它还展示了如何使用API。本书有很多示例,包含了几千行可以实际工作的代码(所有代码都可以在线获得),实现了功能完整的网络客户端和服务器。无论是希望编写特殊用途的web...

    Java网络编程(第三版)中文版.part12.rar

    《Java网络编程》不仅仅是对API的解释:它还展示了如何使用API。本书有很多示例,包含了几千行可以实际工作的代码(所有代码都可以在线获得),实现了功能完整的网络客户端和服务器。无论是希望编写特殊用途的web...

    Java网络编程(第三版)中文版.part08.rar

    《Java网络编程》不仅仅是对API的解释:它还展示了如何使用API。本书有很多示例,包含了几千行可以实际工作的代码(所有代码都可以在线获得),实现了功能完整的网络客户端和服务器。无论是希望编写特殊用途的web...

Global site tag (gtag.js) - Google Analytics