导航:首页 > 编程语言 > udp传输文件java

udp传输文件java

发布时间:2023-05-28 14:10:40

A. java中UDP文件传输怎么实现

java UDP连接,如果要发送文件的话,你只能自己定义一系列的协议
因为TCP UDP 双方发送都是二进制数据
那么这个实现非常复杂
得不停的发送数据,写数据,建议使用http协议

B. 关于java UDP文件传输的问题

使用UDP协议进行文件传输不能保证正确性,很容易发生丢包的情况。建议在进行较大文件传输的时候使用TCP的Socket和ServerSocket类进行传输。在数据量小于65600字节的时候使用UDP是安全的

如果一定要使用UDP方式进行传输的话,为了提高传输的准确性,可以限制一下传输速度,方法是在发送端每次发送后sleep一下,即在发送端程序的dataSocket.send(dataPacket);一句后加上:
TimeUnit.MICROSECONDS.sleep(1);
不过这种方法也不能保证传输绝对准确,所以还是建议用TCP的方式

程序本身应该是能够达到效果的,不知道错误提示是什么。测试之前要看下发送端的filePath文件是否存在,貌似防火墙也有影响,测试之间最好关闭防火墙。下面是我的测试程序,接收端是类A1,接收端是类A2,发送端的文件filePath是D盘根目录下的a1.mkv:

接收端:
import java.io.BufferedOutputStream;
import java.io.DataOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;

public class A1 {
public static DatagramSocket dataSocket;
public static final int PORT=7;
public static byte[] receiveByte;
public static DatagramPacket dataPacket;
public static void main(String[] args) throws IOException{
dataSocket = new DatagramSocket(PORT);
DataOutputStream fileOut = new DataOutputStream(new BufferedOutputStream(new BufferedOutputStream(new FileOutputStream("D:\\a.mkv"))));
int i = 0;
while (i == 0)// 无数据,则循环

{
receiveByte = new byte[1024];
dataPacket = new DatagramPacket(receiveByte, receiveByte.length);
dataSocket.receive(dataPacket);
i = dataPacket.getLength();
// 接收数据

if (i > 0) {
// 指定接收到数据的长度,可使接收数据正常显示,开始时很容易忽略这一点

fileOut.write(receiveByte,0,i);
fileOut.flush();
i = 0;// 循环接收
}

}
}
}

发送端:

import java.io.BufferedInputStream;
import java.io.DataInputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.Inet4Address;
import java.util.Date;

public class A2 {
public static DatagramSocket dataSocket;
public static final int PORT=7;
public static byte[] sendDataByte;
public static DatagramPacket dataPacket;
public static void main(String[] args) throws IOException, InterruptedException{
String filePath="D:\\a1.mkv";
DataInputStream fis = new DataInputStream(new BufferedInputStream(new FileInputStream(filePath)));
dataSocket = new DatagramSocket(PORT+1);
sendDataByte = new byte[1024];
int read=0;
long a=new Date().getTime();
while(true){
if (fis != null) {
read = fis.read(sendDataByte);
}

if (read == -1) {
System.out.println(new Date().getTime()-a);
break;
}
dataPacket = new DatagramPacket(sendDataByte, sendDataByte.length,(Inet4Address) Inet4Address.getByName("localhost"), PORT);
dataSocket.send(dataPacket);
TimeUnit.MICROSECONDS.sleep(1);//限制传输速度
}
}
}

C. Java UDP文件传输,传输后文件损坏......

UDP是并不是可靠的传输方式,字节序列并没有得到校验,所颂袜局以传输文件时出现错误也是难免的.因为,txt,doc和jpg本身即使出错也不会影响打开,顶多出现个别字符或是个别像素错误不会影响整野让体,而exe则是cpu的指令执行序列你错一个就将会导致程序无法执行,如果好核你懂hash的话可以将文件hash一下看看传输前后的hash码是否相同若不相同说明了传输过程出现了错误需要重传.
UDP一般应用在海量的并对准确性要求不高的传输上,并一般伴随有重传机制

D. 如何用java实现UDP的可靠传输

我记忆中可靠的传输应该类似TCP的三次握手:
1.发送方向接收方发送一个随机数。
2.接收方收到随机数后将其+1,再回传给发送方。
3.发送方收到随机数判断其是否被+1,如果是代表双方的传递线路是通畅的,可以正式开始传送数据。

E. 关于java UDP socket传较大文件的问题,我写了个小程序 但就是报错 不知道错哪里了 求大神指出来代码如下

数组下标越界
do while循环的常见问题,do while循环是这样的,先执行do循环内函数,再做while判断。数组下标越界是当buf内的数据满了之后又执行了一次do内的函数体,所行桥行以会越界,修改do-while中的判断,或者改成for循环,或者while循环
而且,楼主,这个buf.length != -1你是想表明一个什么意消信思档哗,标示不太理解,也就是说这段代码出现问题的部分是在do-while循环的判断上,建议修改do-while循环,修改buf.length != -1

F. javaudp一直传输怎么回事

网络卡顿。辩宽禅javaudp一直传输是因为网络卡顿携尘导致的,更换网络重新传输即巧让可解决此问题。该协议是一种用户数据传世协议。

G. pos机和通讯软件之间的报文怎么使用UDP进行传送(使用java)

UDP协议
用户数据报协议UDP(User Datagram Protocol)是无连接传输层协议,提供应用程序之间传送数据报的基本机制。

1.UDP报文的格式
每个UDP报文称为一个用户数据报:它分为两部分:头部和数据区。如图6-14是一个UDP报文的格式,报文头中包含有源端口和目的端口、报文长度以及UDP检验和。

源端口(Source Port)和目的端口(Destination Port)字段包含了16比特的UDP协议端口号,它使得多个应用程序可以多路复用同一个传输层协议 – UDP协议,仅通过不同的端口号来区分不同的应用程序。
长度(Length)字段记录了该UDP数据包的总长度(以字节为单位),包括8字节的UDP头和其后的数据部分。最小值是8(即报文头的长度),最大值为65,535字节。
UDP检验和(Checksum)的内容超出了UDP数据报文本身的范围,实际上,它的值是通过计算UDP数据报及一个伪包头而得到的。但校验和的计算方法与通用的一样,都是累加求和。
不危险,可以打开

H. 一段java UDP传输的问题

我对着你的代拿尘扰困码原封不动写了出来测试一下是没有任何问题的

我觉得是你的测试方法出消李禅错了,应该开两个cmd窗口先运行服务端程序,不要关运行服务端程序的窗口,它会一直阻塞在那里,然后运行发送数据的程序,这时服务端程序就会打印出发送的数据。至于127.0.0.1是不会有错的它是本机回送地址

I. Java UDP 编程,通过Datagram传输list

二个方法,1字节传输,使用对象序列化答轿.ObjectInputStream ObjectOutputStream ,
2.字清让肆符传输,转json传输滑迅

J. Java语言应用中实现UDP协议编程的方法

//州高乱发送端SocketSendFile.java
import java.io.*;
import java.net.*;

public class SocketSendFile {
public static final int SER_PORT=666;
public static final int CLI_PORT=8484;
public static final String SER_IP="192.168.0.35";
public static int bufSize = 1024;
public static byte] mess = new bytebufSize];
//建立Socket引用
public static DatagramSocket dp;

public static void main(String] args) throws Exception {
dp = new DatagramSocket(SER_PORT);
//调用构造函数SocketSendFile,并传递参数args0](所要传输念冲的文件名)
SocketSendFile(args0]);
}

public static void SocketSendFile(String file2) throws Exception {
//册档定义一个计数器
int pos =0;
//设置写入流
FileInputStream fis = new FileInputStream(file2);
BufferedInputStream bis = new BufferedInputStream(fis);
DataInputStream dis = new DataInputStream(bis);

int i;
do {
i = dis.read();
int j=0;
while (j<1024 & i != -1) {
messpos++] = (byte) i;
i=dis.read();
j++;
}
dp.send(new DatagramPacket(mess,pos,InetAddress.getByName(SER_IP),CLI_PORT));
}
while (i != -1);
fis.close();
}
}

//接收端SocketReceiveFile.java
import java.net.*;
import java.io.*;

public class SocketReceiveFile {
public static int bufSize=1024;
public static byte] mess=new bytebufSize];
public static DatagramSocket dp;
public static final int SER_PORT=8484;

public static void main(String] args) throws Exception {
dp = new DatagramSocket(SER_PORT);
SocketReceiveFile(args0]);
}

public static void SocketReceiveFile(String file1) throws Exception {
FileOutputStream fos = new FileOutputStream(file1);
BufferedOutputStream bos = new BufferedOutputStream(fos);
DataOutputStream dos = new DataOutputStream(bos);

int i;
DatagramPacket p = new DatagramPacket(mess,mess.length);

while(true) {
boolean j=false;
while (p.getData().length != 0) {
dos.write(p.getData());
dp.receive(p);
j=true;
}
// System.out.println(new String(p.getData(),0,p.getLength()));
if (j)
System.out.println("文件传送完毕.");
}
// fos.close();
}
}

阅读全文

与udp传输文件java相关的资料

热点内容
抗日战争片400部 浏览:730
编程可以赚钱吗 浏览:729
eclipseandroid建立工程 浏览:732
大胸女友主演 浏览:276
佛教电影《解怨》国语 浏览:474
哪部电影男孩叫安东 浏览:13
有骑木驴的电影叫什么感觉 浏览:265
windows重启mysql命令 浏览:730
单片机输入输出口接收脉冲 浏览:121
控制电脑鼠标的命令 浏览:213
男男强暴电影 浏览:604
便利店送货上门app叫什么 浏览:468
win8怎么打开命令行 浏览:129
p开头的一个看片软件 浏览:755
西班牙电影不准备的爱情 浏览:177
python转换器使用教程 浏览:629
cad图纸重复图形命令 浏览:769
法国女同床戏多私处可见的电影 浏览:926
那你给年龄那边电影想电影想一起电影 浏览:994
原耽小说下载 浏览:873