`
JingAi_jia
  • 浏览: 7496 次
  • 性别: Icon_minigender_1
  • 来自: 泉州
社区版块
存档分类
最新评论

Socket发送多张图片只接收到一张的原因

阅读更多

昨天在实现socket发送多张图片时也碰到只接收到一张的情况,于是到网上找了一些资料,没有找到解决办法。也在昨天时,为了解决别的问题,无意中把上述问题也解决了。我在发送过程中是用DataOutputStream的write()方法将图片写入到输出流中,在客户端是通过DataInputStream的read()方法读取。在客户端中使用的是inputStream.read(buffer),buffer为byte数组对象,设长度为size,如果流中还有数据的话,每次读取的长度都为size个byte。在服务端中将图片写入输出流时,用到的是outputStream.write(buffer),buffer为byte数组对象,长度也设为size。看附件图片,在发送的时候,如果一张图片不是size的倍数,则补充到size一样的长度,在写入流中,这样在客户端接收时,只要每次read size个byte到FileOutputStream中就可以。用DataOutputStream来发送会出现只接收到一张的原因是第一张图片写入到流中时接着写第二张图片,如果第一张图片不能刚好是size的倍数,当客户端每次读取size个byte时,在将要读完第一张的那个buffer中,存在部分第二张图片的byte,使得第二张以后的图片都没办法获得完整的byte。所以没办法读取。详细代码请看本人的另一篇博客《Socket实现多张图片的传送》http://jingai-jia.iteye.com/admin/blogs/1202140

 

  • 大小: 6 KB
分享到:
评论
2 楼 晓夕哈哈 2012-10-09  
我也出现上面的问题了,上楼解决了没?请详细告诉我一下,谢谢
1 楼 num12369 2012-04-21  
你好,看了你的文章《Socket实现多张图片的传送》,在电脑端可以实现多张图片的传送,可是当我把客户端移植到手机上后,手机只能收到第一张图片,那个while(true)循环第二次执行的时候阻塞在imageName = inputStream.readUTF();这句代码上,收不到服务器发来的数据,所以后面的数据就都收不到了,这是怎么回事呢,有时间的话,请你回复我一下,谢谢了,我调试了一晚上都还是这个样子,快崩溃了

相关推荐

    MFC实现多个客户端通过服务器进行通信的Socket多线程编程

    2.服务端通过维护一张转发表来实现对客户端信息的转发,比如客户端A向客户端B发送消息,服务器接收到客户端A发过来消息内容和客户端B信息之后,通过转发表查找到客户端B的Socket,将内容转发给客户端B,实现客户端...

    java UDP报文的发送与接收

    Java UDP(用户数据报协议)是网络编程中的一个...同时,`Java.jpg`可能是一张关于Java UDP编程的图片,用于辅助理解或展示相关概念。在实际应用中,通常会使用多线程处理多个并发的UDP连接,以提高服务器的处理能力。

    java socket 多线程图片模拟视频

    客户端首先需要创建一个`Socket`对象连接到服务器,然后通过`ObjectInputStream`或`DataInputStream`接收服务器发送的图片数据。图片数据可能以字节流的形式接收,然后可以利用Java的图像处理库,如`java.awt.image....

    Linux下利用TCPsocket传输图片

    接收方则需要不断接收数据,直到接收到完整的图片数据,然后将其保存为文件。 在处理大文件如图片时,要特别注意内存管理,避免一次性加载整个文件导致内存溢出。可以考虑分块读取和发送,或者使用缓冲区动态扩展等...

    C# socket游戏示例 ,supersocket开发的21点游戏

    4. **玩家决策**:客户端根据手牌决定是否继续要牌,通过Socket发送决策到服务器。 5. **庄家行动**:当所有玩家完成决策后,服务器按规则进行庄家的回合。 6. **游戏结果**:服务器计算每个玩家的手牌点数,宣布...

    python _socket_yolov3

    该模型的架构包括一系列卷积层、池化层和上采样层,能够在一张图片上同时预测多个类别的边界框。 在Python环境中,我们可以利用TensorFlow、Keras或PyTorch等框架加载预训练的YOLOv3模型。在本项目中,我们可能使用...

    Android Socket编程源码(与PC通讯).zip

    然后,服务器通过Socket的OutputStream发送数据,通过InputStream接收客户端的数据。 2. **客户端(Android)**:在Android设备上,你需要创建一个Socket实例来连接到服务器。首先,使用InetAddress类获取服务器的...

    TCP传输多张图片,客户端和服务端都有

    因此,在传输多张图片时,我们需要自己设定一个边界或者标志位,以便接收方能够正确识别每一张图片的开始和结束。描述中提到的方法是将接收到的字节流转换为字符串,通过特定的标志位来区分不同的图片。 在Java中,...

    局域网 视频 播放 控制 socket TCP UDP 指令 播放器 V3.3

    软件可接收Socket TCP和UDP指令,通过指令控制播放器播放视频等操作,如:播放,暂停,音量加减,视频切换,图片切换,上一张,下一张,自动播放等。软件本身无任何控制,所以操作均通过网络指令实现。 用途: 可...

    毕业设计 java ipv6/ipv4 socket 网络编程

    图表通常包括客户端与服务器之间的数据传输过程,以及双方如何建立连接、发送接收数据和断开连接。 #### 四、TCP编程步骤 **1. 服务器端** - **创建Socket**:使用`socket()`函数。 - **设置属性**:可选操作,如...

    一个最简洁的Socket例子.rar

    尽管没有具体的标签,我们可以从文件名推测,这个示例可能包含了图片(endo_Socket.gif)来辅助理解Socket的工作原理,以及可能的说明文档(2ccc.com.nfo)和核心的Socket源代码文件。 首先,让我们来了解一下...

    UDP获取图片列表,下载图片

    例如,可以使用Python的threading模块创建多个线程,每个线程负责下载一张图片;或者使用asyncio模块进行异步操作,这样在一个线程内就可以同时处理多个下载任务。 此外,为了优化用户体验,可能还需要考虑进度显示...

    简单的TCP文件传输demo

    传输过程中,数据被分割成多个段并按顺序发送,接收端会根据序列号重新组装数据,保证数据的完整性。 2. **套接字编程**:在C/C++中,使用套接字(socket)API来实现TCP通信。`socket()`函数创建套接字,`bind()`...

    数码相框的实现

    开发者需要编写客户端代码,连接到服务器,发送请求并接收返回的图片数据。 在实现过程中,我们需要注意以下几个关键点: 1. 图像处理:需要了解图像文件格式,如JPEG、PNG等,以及如何读取和显示这些格式的图像。...

    手机wifi控制播放ppt

    一旦连接建立,服务器就会接收到手机发送的指令。这些指令通常以特定格式编码(如JSON或XML),以便于解析和执行。例如,"play"表示播放PPT,"next"表示切换到下一张幻灯片。 在Android端,我们需要开发一个用户...

    说明文档1

    创建一个基本的 HTML 文件,该文件包含一张图片,以便在服务器运行时能够展示。HTML 文件的结构包括 `<img>` 标签,用于指定图片的 URL。例如: ```html <!DOCTYPE html> ``` 这个 HTML 文件被放在...

    winform实现局域网多人协同画图

    这个项目的核心特点是允许多个用户在同一时间在一张图片上进行协作编辑,提供了生成图片、导出图片以及打印等功能,极大地提高了团队合作的效率。 首先,我们需要理解WinForm的基本概念。C# WinForm是.NET ...

    C++网络版连连看linux环境

    在Linux系统中,我们通常使用伯克利套接字API,它包括了创建套接字、绑定端口、监听连接请求、接受连接、发送和接收数据等一系列函数。通过这些函数,我们可以构建起客户端和服务器之间的通信桥梁。 为了实现局域网...

    chattingroom:在线聊天室

    当用户选择一张图片并尝试发送时,前端会先将图片转换为缩略图,然后以Base64编码的形式通过Socket.IO发送到服务器。服务器接收到后,同样广播给所有用户,前端接收到后解码并显示。 **5) 图片发送:** 对于完整的...

Global site tag (gtag.js) - Google Analytics