`

Socket通信过程中,在返回的消息中不能完全读取所有返回消息的问题

阅读更多

问题说明: 前期在设计socket 通信时,设计的不够完善,在返回的消息中带有消息的长度,但是是和消息一起加密后,返回到前台系统。在实际应用时,如果后台返回的数据包过大,只能接收一部份数据(一般在 4k 左右),后面的数据会产生乱码。

系统说明

建立socket 连接后,发送了三次消息:

第一次发送消息进行用户认证,可以读到返回的消息内容;

第二次发送的是要发的消息的长度,不需要读取返回的消息内容;

第三次发送需要的消息请求,后台根据请求返回我们要的消息内容。这时如果设定一个很大空间的字节数组,读取返回数据时,不能保证一次读取完 (虽然后台发了一个包,但在网络传输过程中, os 分配的缓冲区时一定的,这时 os 可能就分成 ) ;采用逐个字节读取时,读不到返回的数据。

解决方式: 先读取后台返回的消息(消息中含有本条消息的长度),解密后取得消息的长度,再根据消息长度判断读取到的消息长度是否是实际的消息长度,如果不相同,则表示是分包传输的,需要读取下一个包中的消息内容,依此类推,将读取到的消息内容放到一起,即为实际传输的消息长度。( 具体实现方式可参见下一代互联网网络审计系统 )

设计注意点: socket 通信过程中要设计消息体时要注意: 要么有长度,要么有唯一的结束符,要么是自建或通用的协议有固定的格式去约束,否则分不开不同的包,就挂了。

不知道长度是可以读,但是如果后台发两个包,tcp是会黏在一起的

分享到:
评论

相关推荐

    java socket通信自定义消息协议

    3. `ServerThread`继承`Thread`,在`run()`方法中处理Socket通信,包括读取客户端发送的数据和响应。 4. 服务器端同样获取InputStream,通过`Socket.getInputStream()`。 5. 接收到字节流后,按照自定义协议解析消息...

    socket通信文件传输

    在文件传输中,Socket通信提供了一种灵活、高效的方法,尤其适用于大数据量或者跨平台的文件交换。以下是对Socket通信文件传输的详细解释: 1. **Socket基本概念**: Socket,也称为“套接字”,是网络通信中的一...

    C#与Android Socket通信

    1. 异常处理:Socket通信过程中可能会出现各种异常,如连接超时、网络中断等,需妥善处理。 2. 并发处理:如果服务器需要同时处理多个客户端连接,需要考虑多线程或异步处理。 3. 数据编码:确保客户端和服务器之间...

    android+pc socket通信

    在Android与PC的Socket通信中,需要注意一些问题: - **权限申请**:Android应用需要在Manifest.xml中添加`INTERNET`权限,以便进行网络操作。 - **异常处理**:由于网络通信可能出现各种异常,如连接超时、网络中断...

    matlab环境下socket通信

    在MATLAB环境中实现Socket通信是将强大的MATLAB计算能力与网络通信功能相结合的重要技术。Socket是一种网络编程接口,它允许程序之间通过网络进行双向通信。MATLAB提供了丰富的工具和函数来支持Socket通信,使得用户...

    Android socket通信聊天,客户端+服务端

    在Android平台上进行网络通信时,Socket通信是一种常见且重要的方式,尤其在实现聊天应用时。本文将深入探讨如何在Android中实现基于Socket的客户端和服务端通信,以构建一个简单的聊天应用。 首先,让我们理解...

    socket通信,客户端向服务器传文件

    在IT领域,Socket通信是一种基于TCP/IP协议族的网络编程接口,用于实现不同网络设备间的双向通信。在Java中,我们可以使用Java的Socket类和ServerSocket类来构建客户端和服务器端的通信。在这个场景中,我们将讨论...

    Socket通信

    Socket通信是计算机网络编程中的重要组成部分,主要用于实现不同设备间进程间的通信。在这个主题中,我们将深入探讨Socket的工作原理、服务器与客户端的交互过程以及如何使用Socket进行编程。 首先,Socket可以理解...

    socket通信传文件

    在本文中,我们将深入探讨如何利用Socket通信来传输文件,特别是exe可执行文件,并在客户端接收后执行运行。 首先,我们需要了解Socket通信的基本原理。Socket是网络上的两个进程间通信的一种端点,可以理解为一个...

    java Socket通信实现.rar

    在Socket通信中,我们使用InputStream和OutputStream对象来读取和写入数据。例如,Socket的getInputStream()方法返回一个InputStream对象,我们可以从中读取服务器发送的数据;同样,getOutputStream()返回一个...

    java socket通信实现

    Java Socket通信实现是一种基于TCP/IP协议的网络通信方式,它允许两台计算机通过互联网进行双向数据传输。在Java中,Socket类和ServerSocket类...在实际项目中,Socket通信常用于构建分布式系统、实时数据传输等场景。

    java实现简单socket通信

    Java实现的简单Socket通信是网络编程中的基础技术,主要用于设备间的双向数据传输。在这个场景中,我们有两个窗口,一个作为服务器端,另一个作为客户端,它们通过TCP协议进行通信。TCP是一种面向连接的、可靠的传输...

    Java Socket 聊天通信演示代码

    首先,Java Socket通信基于TCP(传输控制协议),它确保了数据的可靠传输,包括数据的顺序和无丢失。在聊天应用中,服务器端创建一个Socket监听特定的端口,等待客户端的连接请求。一旦客户端连接到服务器,它们之间...

    Android socket通信

    在Android中,Socket通信常用于实现即时通讯应用,如聊天应用或者在线游戏等。下面将详细介绍Android客户端和Java服务端如何实现Socket通信以及服务端如何转发所有客户端的消息。 1. **Android客户端Socket通信**:...

    Socket通信Java代码

    2. 异常处理:在Socket通信中,需要捕获并处理可能抛出的`IOException`,例如网络中断、连接拒绝、主机不可达等。 五、多线程与并发 在实际应用中,服务器可能需要同时处理多个客户端的连接请求。这时,服务器端...

    socket通信,对话框显示接受情况

    Socket通信是计算机网络编程中的重要概念,主要用于实现进程间的通信,尤其在分布式系统和互联网应用中广泛应用。在MFC(Microsoft Foundation Classes)框架下,我们可以利用Socket类来构建客户端和服务端的通信...

    android socket通信实例程序

    在Android平台上进行网络通信时,Socket通信是一种常见且重要的方式,尤其在实现设备间的数据交换、服务器客户端交互等场景。本实例程序主要涉及到的是Android应用如何利用Socket进行TCP(Transmission Control ...

    Socket通信样例代码

    在这个样例代码中,我们将深入探讨URL、InetAddress、Socket和ServerSocket这四个关键类在Socket通信中的应用。 1. URL(统一资源定位符): URL是互联网上的资源定位工具,它包含了访问资源的协议类型(如http、...

    java上socket通信即时通信界面本

    Java Socket通信是网络编程中的重要一环,它提供了在两台计算机之间建立低级连接的能力,使得它们可以相互通信。在这个"java上socket通信即时通信界面本"中,我们很显然关注的是如何使用Java来构建一个具有图形用户...

    android与电脑socket通信的代码

    在IT行业中,Android和电脑之间的Socket通信是一种常见的技术,它允许设备之间通过网络进行数据交换。本示例涉及的是Android手机与电脑之间的通信,其中电脑端提供了C#和Java两种编程语言的实现。下面我们将详细探讨...

Global site tag (gtag.js) - Google Analytics