- 浏览: 283531 次
- 性别:
- 来自: 长沙
文章分类
最新评论
-
CodeLove:
如果包含<,(,)...等特殊字符呢
Python变量名检测 -
zlxzlxzlxzlxzlx:
这不能算是任意进制之间的转换,只能算是 2、8、10、16 几 ...
java实现的任意进制转换 -
mychaoyue2011:
在本地执行了几遍,结果都是:s2开始休眠s1开始休眠s2休眠结 ...
Java线程学习笔记(四)线程join -
chxiaowu:
不错!
Java版的树 -
TenAclock:
这个例子 做不到“学生都交完” 考试结束,只能做到等到考试时间 ...
Java线程学习笔记(十一) DelayQueue的应用
UDP是不可靠的,发送的数据不一定会到达,且顺序不一定完整。
想要验证一下UDP传输文件的效果,最直观的是传输图片。
这里在客户端的DatagramSocket设置了个超时时间,当发送端发送完后客户端就会抛出超时异常,程序就退出了。
UDPFileReceiver:
package com.woxiaoe.study.java_net.udp; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.SocketException; public class UDPFileReceiver { private int port = 1220; private DatagramSocket socket; public UDPFileReceiver() throws SocketException{ socket = new DatagramSocket(port); socket.setSoTimeout(4000); } public void reciveData() throws FileNotFoundException{ File newfile = new File("641k.jpg"); byte[] buf = new byte[8192]; FileOutputStream fos = new FileOutputStream(newfile); while(true){ DatagramPacket packet = new DatagramPacket(buf, 8192); try{ socket.receive(packet); fos.write(packet.getData(), 0, packet.getLength()); }catch(Exception e){ try { System.out.println("传输结束"); socket.close(); fos.flush(); fos.close(); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } break; } } } public static void main(String[] args) throws FileNotFoundException, SocketException { new UDPFileReceiver().reciveData(); } }
UDPFileServer:
package com.woxiaoe.study.java_net.udp; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.net.SocketException; import java.net.UnknownHostException; public class UDPFileServer { private int port = 1220; private String filePath = ""; private DatagramSocket socket; public UDPFileServer() throws SocketException { socket = new DatagramSocket(); //System.out.println("服务器启动成功"); } public void service() throws IOException{ InputStream is = this.getClass().getResourceAsStream("641k.jpg"); byte[] buffer = new byte[8192]; int len = 0; while((len = is.read(buffer)) != -1){ System.out.println(len); DatagramPacket packet = new DatagramPacket(buffer, len,InetAddress.getByName("localhost"),port); socket.send(packet); } socket.close(); } public static void main(String[] args) throws SocketException, IOException { new UDPFileServer().service(); } }
原图片 和 传输后的图片对比
(32K)
(100K)
(900K)
通过比较可以看出但图片大小增大了以后失真就越明显,由此可见UDP传输不能保证文件的完整性。如果基于UDP的文传输要保证文件的完整性,者必须处理丢失或乱序的情况
评论
17 楼
kimmking
2010-09-13
自定义传输格式:
分片
每片编号
客户端记录收到的片段
最后再请求未收到的
分片
每片编号
客户端记录收到的片段
最后再请求未收到的
16 楼
沈冠军
2010-09-13
用tcp来应该不会出现这个现象吧
15 楼
psuqqvfp
2010-05-26
udp本身就是不可靠的,建议用 sctp 传
14 楼
jitabc
2010-05-25
可以试试jdk 7中的com.sun.nio.sctp
13 楼
fjlyxx
2010-05-25
呵呵,LZ是你代码问题导致丢包的。UDP在某些方面还是很有用的,特别是局域网内的通信。
比如要做一个局域网内无中心服务器的聊天系统,那么UDP完全可以作为建立在线用户列表(往255发上线下线包)以及传输消息的协议(往固定IP发消息包)。UDP基本上需要回复包。
用UDP发送文件,理论上是有可能发生丢包的情况,但是如果协议制定的好这种情况是可以避免的。
比如要做一个局域网内无中心服务器的聊天系统,那么UDP完全可以作为建立在线用户列表(往255发上线下线包)以及传输消息的协议(往固定IP发消息包)。UDP基本上需要回复包。
用UDP发送文件,理论上是有可能发生丢包的情况,但是如果协议制定的好这种情况是可以避免的。
12 楼
mikehuhu
2010-05-24
是不是在本机或内网测试的,这个顺序一般不会乱吧
11 楼
strongkill
2010-05-24
真的没有多大意思.
1,UDP肯定会掉包.
2,做一个验证重发机制,UDP就可以默认为可靠了.
3,UDP在某些地比TCP优秀~
1,UDP肯定会掉包.
2,做一个验证重发机制,UDP就可以默认为可靠了.
3,UDP在某些地比TCP优秀~
10 楼
石中玉
2010-05-24
woxiaoe 写道
mathfox 写道
这测这有什么意义啊。
我只是验证下UDP传输文件的效果
真无聊...
9 楼
peacenik
2010-05-24
lbfhappy 写道
楼主至少要要排一下序吧,并且没有收到也要重发一下吧。
这样直接用收到的byte[]写入文件,肯定是不行的。
你这做的只是局域网的传输,一放外网,再小的图片也可能会错的。
要用UDP传递数据必须自己去实现丢包重发机制以及包的顺序问题。
这样直接用收到的byte[]写入文件,肯定是不行的。
你这做的只是局域网的传输,一放外网,再小的图片也可能会错的。
要用UDP传递数据必须自己去实现丢包重发机制以及包的顺序问题。
8 楼
lbfhappy
2010-05-24
楼主至少要要排一下序吧,并且没有收到也要重发一下吧。
这样直接用收到的byte[]写入文件,肯定是不行的。
你这做的只是局域网的传输,一放外网,再小的图片也可能会错的。
要用UDP传递数据必须自己去实现丢包重发机制以及包的顺序问题。
这样直接用收到的byte[]写入文件,肯定是不行的。
你这做的只是局域网的传输,一放外网,再小的图片也可能会错的。
要用UDP传递数据必须自己去实现丢包重发机制以及包的顺序问题。
7 楼
woxiaoe
2010-05-24
mathfox 写道
这测这有什么意义啊。
我只是验证下UDP传输文件的效果
6 楼
dieslrae
2010-05-24
校验md5码,不对就重新传,- -,不过貌似不人性化
5 楼
mathfox
2010-05-24
这测这有什么意义啊。
4 楼
whaosoft
2010-05-24
那lz 用png的试试呢?? 应该不会有事了吧
3 楼
myreligion
2010-05-24
用SCTP协议传,有序的UDP协议:)
2 楼
woxiaoe
2010-05-23
yunj 写道
楼主传的是jpg格式的图片,压缩过的格式。
传bmp的试试,可能出错点就不会影响其他点了。
传bmp的试试,可能出错点就不会影响其他点了。
我穿bmp格式的话图片显示不出来
1 楼
yunj
2010-05-23
楼主传的是jpg格式的图片,压缩过的格式。
传bmp的试试,可能出错点就不会影响其他点了。
传bmp的试试,可能出错点就不会影响其他点了。
发表评论
-
Consider the following code: What will be printed?
2010-09-24 20:30 978Consider the following code: Wh ... -
Java 基础复习笔记一
2010-06-04 02:03 1147这两天复习java的基础知识,把一些自己认为比较有用的点记录下 ... -
Java 转义字符
2010-06-03 21:21 1018\n 回车(\u000a) \t 水平制表符(\u0009) ... -
生产消费者的模拟
2010-05-27 23:16 1697采用Java 多线程技术,设计实现一个符合生产者和消费者问题的 ... -
Java 控制台下显示文件结构
2010-05-27 00:10 3275题目: 编写一个Java ... -
Java得到类目录
2010-05-26 23:22 1192String path = MainTest.class.ge ... -
Java文件压缩
2010-05-23 21:54 1237package com.woxiaoe.study.io ... -
【转载】Java String.Format() 方法及参数说明
2010-05-15 22:18 1341JDK1.5中,String类新增了一个很有用的静态方法S ... -
【转载】String.format函数使用方法介绍
2010-05-15 22:17 1214http://edu.codepub.com/2009/111 ... -
Java线程学习笔记(十一) DelayQueue的应用
2010-05-01 00:34 15717DelayQueue 是一个无界的BlockingQueue ... -
Java线程学习笔记(十)CountDownLatch 和CyclicBarrier
2010-04-30 21:04 2857CountDownLatch : 一个同步辅助类,在完成一组 ... -
Java线程学习笔记(九)生产者消费者问题
2010-04-29 22:27 1746用多线程来模拟生产者消费者问题。用到BlockingQueue ... -
Java线程学习笔记(八)线程之间的协作
2010-04-26 23:13 1841wait()与notifyAll() 调用sleep ... -
Java线程学习笔记(七)java中递增不是原子性
2010-04-24 23:00 2937以下为测试代码,通过一个自增函数得到最新的值,玩Set你存,看 ... -
Java线程学习笔记(六)在其他对象上同步
2010-04-24 22:47 1376package com.woxiaoe.study.threa ... -
Java线程学习笔记(五)资源共享问题
2010-04-24 21:04 1294IncreaseClient 中持有一个base,每次调用起i ... -
Java线程学习笔记(四)线程join
2010-04-24 20:06 1312《Java编程思想》的一个例子,如果某个线程在另一个线程t上调 ... -
基于java的图(四) 强连通组件
2010-04-22 21:06 1558有向图中, u可达v不一定意味着v可达u. 相互可达则属于同一 ... -
基于java的图(三) 图的拓扑排序
2010-04-21 16:14 1895相关: 基于java的图的实现 基于java ... -
基于java的图的实现(二) 图的两种遍历
2010-04-20 21:51 2124图的实现见http://www.iteye.com/topic ...
相关推荐
这种特性使得UDP在数据传输速度和资源消耗上比TCP更优,适合于对实时性和速度有较高要求的应用场景,如在线视频、语音通话、游戏等。 ### C#中的Socket编程 在C#中,Socket编程主要用于网络通信,包括TCP和UDP。...
而UDP虽然效率更高,但不保证数据包的顺序和丢失,因此不适合大文件如图片的传输。 此外,需要注意的是,由于JPEG图片文件是二进制数据,所以在传输过程中不能直接当作文本数据处理。客户端和服务器需要正确地处理...
本示例以"socket传输图片delphi代码例子"为主题,展示了如何使用Delphi进行Socket编程来实现在客户端和服务器之间发送和接收图片。 Delphi是一种强大的面向对象的编程环境,以其快速的编译器和直观的集成开发环境...
标题 "mfc udp pictrans" 暗示了一个基于MFC(Microsoft Foundation Classes)的应用程序,该程序利用UDP(User Datagram Protocol)协议进行图片的传输。MFC是微软提供的一套C++类库,用于构建Windows应用程序,它...
本示例主题“使用Winsock传输并显示图片”聚焦于如何利用VC++(Microsoft Visual C++)这一强大的开发环境,通过Winsock库来实现在网络上的图像数据传输,并在接收端正确地显示这些图片。下面将详细介绍这一过程涉及...
开发者尝试了JPG压缩算法,但未能找到一个在保持可接受清晰度的同时将图片大小压缩到64KB的解决方案。另一种方法是将图片数据分割成多个小于64KB的数据包,然后在接收端重新组装。然而,这种方法需要处理丢包问题,...
UDP(User Datagram Protocol)则是无连接的,适合对实时性要求高的应用,但不保证数据的可靠传输。 **图片、文字、文件传输** 在Socket编程中,图片、文字和文件都可以视为二进制数据流进行处理。传输前,可能...
UDP(User Datagram Protocol)是无连接的、不可靠的传输协议,但其广播特性非常适合服务发现。服务器通过UdpClient发送广播数据包,包含自身的IP地址,客户端接收到广播后,解析数据包获取服务器的IP,并使用TCP...
局域网文件传输是计算机网络中的一个重要应用,它允许连接在同一局域网(LAN)内的设备之间快速交换数据,如文件、图片、文档等。在实现这一功能时,通常会用到Socket编程技术,它是Internet协议族的一部分,为应用...
1. **文件读写**:在传输图片前,需要读取文件内容。使用`fopen()`、`fread()`和`fclose()`等函数读取图片文件。 2. **数据打包**:将读取到的图片数据转换为字节数组,以便通过socket传输。可以使用`malloc()`分配...
然后使用`socket()`函数创建一个Socket实例,指定协议类型(如TCP或UDP)、地址族(如AF_INET表示IPv4)和套接字类型(如SOCK_STREAM表示TCP)。 3. **服务器端编程**: - **绑定(Bind)**:使用`bind()`函数将...
这个聊天工具支持发送文字和图片,意味着它可能采用了二进制流的方式传输图片数据,以确保图片在传输过程中不被破坏。 在实现过程中,通常会使用Python的`socket`模块,它是Python标准库的一部分。在服务器端,你...
如果数据包在传输过程中丢失或损坏,UDP不会尝试重传。 - **高效性**: 由于UDP的轻量级特性,它在对实时性要求较高的应用场景中更为适用,例如在线游戏、视频会议等。 **联系**: - **同属于TCP/IP协议族**: TCP和...
Indy是一个开源的网络应用组件,它涵盖了客户端和服务端的各种网络操作,如TCP、UDP和原始套接字。在BCB6中,安装Indy的步骤如下: A. 首先,如果已有旧版本的Indy,需要通过BCB的Modify选项删除。 B. 下载最新版的...
2. **地址族与套接字类型**: 创建套接字时,需要指定地址族(如AF_INET用于IPv4,AF_INET6用于IPv6)和套接字类型(如SOCK_STREAM用于TCP,SOCK_DGRAM用于UDP)。在示例中,可能使用了AF_INET和SOCK_STREAM,因为TCP...
3. **USB Socket通信**:在Android和PC间通过USB进行Socket通信,是利用了USB接口的数据传输能力,结合TCP/IP或UDP/IP网络协议。Socket提供了一种进程间的通信机制,可以实现两台设备间的双向数据流。在这个案例中,...
媒体数据(音频、视频等)使用Secure Real-time Transport Protocol (SRTP)传输,非媒体数据(如文本、图片等)则使用Stream Control Transmission Protocol (SCTP)传输。在传输层使用UDP协议,并通过DTLS协议确保...
在现实生活中,一个大建筑可能有多个入口,计算机也是如此,它拥有不同类型的端口,包括物理端口(如USB、网线接口)和通信协议端口(如TCP或UDP端口)。这些端口用于不同硬件之间的连接和数据传输。 “连接( )”...
“TCP/UDP”是传输控制协议(Transmission Control Protocol)和用户数据报协议(User Datagram Protocol)的缩写,两者都是互联网协议族中用于数据传输的协议。TCP是面向连接的、可靠的协议,而UDP是无连接的、不...