導航:首頁 > 編程語言 > 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相關的資料

熱點內容
主角為秦霄的穿越小說 瀏覽:707
大尺度床戲多的電影 瀏覽:395
台灣性電影 瀏覽:942
華為手機聊天加密軟體 瀏覽:833
台灣電影愛情片他女朋友死了 瀏覽:813
電影音樂下載 瀏覽:158
池恩瑞的作品 瀏覽:912
澳門電影免費觀看網站大全 瀏覽:243
電腦多組命令 瀏覽:806
abkdb編譯 瀏覽:710
尺度計演算法大全 瀏覽:926
單片機開發板的作用 瀏覽:331
唯美愛情動作電影在線觀看 瀏覽:574
老電影農村片 瀏覽:303
netbeansclinux 瀏覽:181
不可能的世界小說免費閱讀 瀏覽:272
法國啄木鳥絲襪電影 瀏覽:307
動作片愛情在線免費觀看 瀏覽:1002
騰飛投資理財分紅源碼 瀏覽:854