问题说明:
前期在设计socket
通信时,设计的不够完善,在返回的消息中带有消息的长度,但是是和消息一起加密后,返回到前台系统。在实际应用时,如果后台返回的数据包过大,只能接收一部份数据(一般在
4k
左右),后面的数据会产生乱码。
系统说明
:
建立socket
连接后,发送了三次消息:
第一次发送消息进行用户认证,可以读到返回的消息内容;
第二次发送的是要发的消息的长度,不需要读取返回的消息内容;
第三次发送需要的消息请求,后台根据请求返回我们要的消息内容。这时如果设定一个很大空间的字节数组,读取返回数据时,不能保证一次读取完
(虽然后台发了一个包,但在网络传输过程中,
os
分配的缓冲区时一定的,这时
os
可能就分成
)
;采用逐个字节读取时,读不到返回的数据。
解决方式:
先读取后台返回的消息(消息中含有本条消息的长度),解密后取得消息的长度,再根据消息长度判断读取到的消息长度是否是实际的消息长度,如果不相同,则表示是分包传输的,需要读取下一个包中的消息内容,依此类推,将读取到的消息内容放到一起,即为实际传输的消息长度。(
具体实现方式可参见下一代互联网网络审计系统
)
。
设计注意点:
在socket
通信过程中要设计消息体时要注意:
要么有长度,要么有唯一的结束符,要么是自建或通用的协议有固定的格式去约束,否则分不开不同的包,就挂了。
不知道长度是可以读,但是如果后台发两个包,tcp是会黏在一起的
。
分享到:
相关推荐
3. `ServerThread`继承`Thread`,在`run()`方法中处理Socket通信,包括读取客户端发送的数据和响应。 4. 服务器端同样获取InputStream,通过`Socket.getInputStream()`。 5. 接收到字节流后,按照自定义协议解析消息...
在文件传输中,Socket通信提供了一种灵活、高效的方法,尤其适用于大数据量或者跨平台的文件交换。以下是对Socket通信文件传输的详细解释: 1. **Socket基本概念**: Socket,也称为“套接字”,是网络通信中的一...
1. 异常处理:Socket通信过程中可能会出现各种异常,如连接超时、网络中断等,需妥善处理。 2. 并发处理:如果服务器需要同时处理多个客户端连接,需要考虑多线程或异步处理。 3. 数据编码:确保客户端和服务器之间...
在Android与PC的Socket通信中,需要注意一些问题: - **权限申请**:Android应用需要在Manifest.xml中添加`INTERNET`权限,以便进行网络操作。 - **异常处理**:由于网络通信可能出现各种异常,如连接超时、网络中断...
在MATLAB环境中实现Socket通信是将强大的MATLAB计算能力与网络通信功能相结合的重要技术。Socket是一种网络编程接口,它允许程序之间通过网络进行双向通信。MATLAB提供了丰富的工具和函数来支持Socket通信,使得用户...
在Android平台上进行网络通信时,Socket通信是一种常见且重要的方式,尤其在实现聊天应用时。本文将深入探讨如何在Android中实现基于Socket的客户端和服务端通信,以构建一个简单的聊天应用。 首先,让我们理解...
在IT领域,Socket通信是一种基于TCP/IP协议族的网络编程接口,用于实现不同网络设备间的双向通信。在Java中,我们可以使用Java的Socket类和ServerSocket类来构建客户端和服务器端的通信。在这个场景中,我们将讨论...
Socket通信是计算机网络编程中的重要组成部分,主要用于实现不同设备间进程间的通信。在这个主题中,我们将深入探讨Socket的工作原理、服务器与客户端的交互过程以及如何使用Socket进行编程。 首先,Socket可以理解...
在本文中,我们将深入探讨如何利用Socket通信来传输文件,特别是exe可执行文件,并在客户端接收后执行运行。 首先,我们需要了解Socket通信的基本原理。Socket是网络上的两个进程间通信的一种端点,可以理解为一个...
在Socket通信中,我们使用InputStream和OutputStream对象来读取和写入数据。例如,Socket的getInputStream()方法返回一个InputStream对象,我们可以从中读取服务器发送的数据;同样,getOutputStream()返回一个...
Java Socket通信实现是一种基于TCP/IP协议的网络通信方式,它允许两台计算机通过互联网进行双向数据传输。在Java中,Socket类和ServerSocket类...在实际项目中,Socket通信常用于构建分布式系统、实时数据传输等场景。
Java实现的简单Socket通信是网络编程中的基础技术,主要用于设备间的双向数据传输。在这个场景中,我们有两个窗口,一个作为服务器端,另一个作为客户端,它们通过TCP协议进行通信。TCP是一种面向连接的、可靠的传输...
首先,Java Socket通信基于TCP(传输控制协议),它确保了数据的可靠传输,包括数据的顺序和无丢失。在聊天应用中,服务器端创建一个Socket监听特定的端口,等待客户端的连接请求。一旦客户端连接到服务器,它们之间...
在Android中,Socket通信常用于实现即时通讯应用,如聊天应用或者在线游戏等。下面将详细介绍Android客户端和Java服务端如何实现Socket通信以及服务端如何转发所有客户端的消息。 1. **Android客户端Socket通信**:...
2. 异常处理:在Socket通信中,需要捕获并处理可能抛出的`IOException`,例如网络中断、连接拒绝、主机不可达等。 五、多线程与并发 在实际应用中,服务器可能需要同时处理多个客户端的连接请求。这时,服务器端...
Socket通信是计算机网络编程中的重要概念,主要用于实现进程间的通信,尤其在分布式系统和互联网应用中广泛应用。在MFC(Microsoft Foundation Classes)框架下,我们可以利用Socket类来构建客户端和服务端的通信...
在Android平台上进行网络通信时,Socket通信是一种常见且重要的方式,尤其在实现设备间的数据交换、服务器客户端交互等场景。本实例程序主要涉及到的是Android应用如何利用Socket进行TCP(Transmission Control ...
在这个样例代码中,我们将深入探讨URL、InetAddress、Socket和ServerSocket这四个关键类在Socket通信中的应用。 1. URL(统一资源定位符): URL是互联网上的资源定位工具,它包含了访问资源的协议类型(如http、...
Java和C++之间的Socket通信是跨语言网络编程的一个常见应用场景,尤其在系统集成、设备通讯或者混合编程中。Socket提供了一种基于TCP/IP协议的进程间通信(IPC)方式,可以实现在不同操作系统上的进程之间的数据传输...
Java Socket通信是网络编程中的重要一环,它提供了在两台计算机之间建立低级连接的能力,使得它们可以相互通信。在这个"java上socket通信即时通信界面本"中,我们很显然关注的是如何使用Java来构建一个具有图形用户...