`

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();

}
分享到:
评论

相关推荐

    java socket 客户端代码

    在Java编程语言中,Socket是实现网络通信的基础组件,它为两台计算机之间的通信提供了低级别的接口。在本文中,我们将深入探讨Java Socket客户端代码及其在创建基于Socket的聊天室客户端中的应用。 首先,理解...

    Java Socket网络编程.pdf

    Socket编程主要用于实现客户端和服务器之间的通信,基于客户机/服务器模型。在这个模型中,服务器端通常处于被动等待状态,监听特定端口的连接请求,而客户端则主动发起连接。 在Java中,Socket编程主要涉及两个...

    java socket编程 服务器和客户端

    以上就是Java Socket编程中服务器和客户端交互的基本步骤和涉及的关键知识点。实际应用中,可能还需要考虑到网络延迟、数据完整性、安全性等因素,并进行相应的优化和处理。在TestSocket项目中,我们可以找到具体的...

    Java socket编程实现两台主机间的通信

    Java Socket 编程实现两台主机间的通信 Java Socket 编程是 Java 语言中用于实现网络通信的编程...通过了解 Java Socket 编程的原理、实现方法和应用场景,可以更好地应用 Java Socket 编程来实现网络通信和数据传输。

    基于TCP的Socket编程服务器和客户端代码

    本主题聚焦于使用Java进行基于TCP的Socket编程,通过`File_client.java`和`File_server.java`两个文件来实现服务器和客户端之间的数据交换。 首先,TCP Socket编程的基础是Java的`java.net.Socket`和`java.net....

    JAVA Socket编程实现文件上传

    Java Socket编程是网络编程的基础,它提供了在两个应用程序之间建立通信连接的能力。在这个场景中,我们讨论的是如何使用Java的Socket来实现文件上传功能,即从客户端将文件发送到服务器,然后保存到服务器的数据库...

    Socket服务端客户端以tcp/ip协议发送接收报文

    在IT领域,网络通信是不可或缺的一部分,而Java Socket编程则是实现网络通信的一种常见方式,尤其在TCP/IP协议栈上。本教程将详细讲解如何利用Java Socket实现基于TCP/IP的服务端和客户端之间的报文发送与接收。 ...

    java socket 邮件客户端

    这对于学习网络编程、邮件协议和Java Socket编程都是宝贵的学习材料。同时,也可以通过源代码学习到如何实现安全的邮件传输,如使用SSL/TLS加密连接。 总之,"Java Socket邮件客户端"是一个实用的示例,展示了如何...

    例10.05 Socket客户端程序.rar_java socket _socket_socket 客户端_socket

    标签中的"java_socket_socket 客户端_socket_客户端 socket客户端"进一步强调了Java中的Socket编程以及客户端的特定角色。 在压缩包文件列表中,"例10.05 Socket客户端程序"可能是包含源代码文件的目录或Java文件...

    Java Socket PC端传输文件简易服务器客户端

    Java Socket编程是网络编程中的重要组成部分,主要用于在两台计算机之间建立双向通信通道,实现数据的交换。在Java中,Socket类和ServerSocket类是进行网络通信的核心工具,它们提供了客户端与服务器之间的连接和...

    总结java_socket编程

    总的来说,Java Socket编程为开发者提供了灵活的网络通信手段,既可以实现可靠的数据传输(TCP),也可以实现快速但不可靠的数据传输(UDP)。在设计应用程序时,应根据实际需求选择合适的通信协议。对于需要稳定性...

    java socket 编程,Java socket 编程实例

    Java语言提供了丰富的Socket编程接口,使得开发者能够方便地实现客户端与服务器之间的数据交换。 #### 二、Socket编程模式 Socket编程主要包括两种基本模式:**TCP (Transmission Control Protocol)** 和 **UDP ...

    Java基于socket实现的客户端和服务端通信功能完整实例

    通过本文,读者可以了解Java中的Socket编程,掌握客户端和服务器端的实现方法,从而实现网络通信。 相关知识点 * Java中的Socket * Socket的基本概念 * 客户端和服务器端的实现 * 数据的发送和接收 * Socket的连接...

    三步学会Java_Socket编程

    在Java中,Socket编程是实现网络通信的基础,它提供了进程间通信的能力,使得两个相隔万里的计算机可以通过互联网进行数据交换。本篇文章将深入讲解如何通过三步学习Java Socket编程。 **第一步:理解Socket** ...

    java socket 客户端和服务端例子

    Java Socket是Java编程语言中用于实现网络通信的一种基础工具,它允许两个应用程序通过TCP/IP协议进行数据交换。在这个"java socket 客户端和服务端例子"中,我们有两个主要组件:服务端(server)和客户端(client...

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

    在这个场景中,我们关注的是如何使用单线程Socket编程来实现从MySQL数据库中读取数据。首先,我们需要理解Socket的基本概念,然后深入探讨如何构建Socket客户端和服务器,以及如何与MySQL数据库进行交互。 **Socket...

    浅出Java Socket编程

    Java Socket编程是网络编程的基础,它是Java平台中用于实现客户端-服务器通信的关键组件。本教程将深入浅出地探讨Java Socket编程的核心概念和技术,帮助开发者理解如何构建可靠的网络应用程序。 一、Socket概述 ...

    Java Socket编程:文件传输.doc

    Java Socket 编程是 Java 语言中的一种网络编程技术,用于实现客户端和服务器端之间的数据传输。文件传输是 Java Socket 编程中的一种常见应用场景,通过建立客户端和服务器端之间的连接,实现文件的上传和下载。 ...

    Java源码:Socket编程.rar_java socket _java编程_socket java_socket编程 jav

    Java Socket编程是网络编程中的重要组成部分,主要用于实现...总的来说,Java Socket编程是构建分布式系统、实现客户端与服务器间数据交换的基础。通过深入理解和实践,开发者可以构建出高效、稳定的网络应用程序。

    Android Socket编程实现服务器数据读取

    在Android开发中,Socket编程是实现设备间通信的重要手段,特别是在服务器数据读取的应用场景下。Socket,也称为套接字,是网络编程中的一个概念,它为应用程序提供了在网络中发送和接收数据的接口。本篇文章将深入...

Global site tag (gtag.js) - Google Analytics