導航:首頁 > 編程語言 > udp文件傳輸java

udp文件傳輸java

發布時間:2023-05-29 00:03:52

java寫的一個udp的demo用來計算探針傳送過來的數據,怎麼實現一個介面來調用這個數據

Java UDP通信簡單實現
1、Java實現方式
1)server端



/**
*UDPserver端
**/
publicclassUdpServer{
//定義一些常量
privatefinalintMAX_LENGTH=1024;//最大接收位元組長度
privatefinalintPORT_NUM=5066;//port號
//用以存放接收數據的位元組數組
privatebyte[]receMsgs=newbyte[MAX_LENGTH];
//數據報套接字
;
//用以接收數據報
;

publicUdpServer(){
try{
/*******接收數據流程**/
//創建一個數據報套接字,並將其綁定到指定port上
datagramSocket=newDatagramSocket(PORT_NUM);
//DatagramPacket(bytebuf[],intlength),建立一個位元組數組來接收UDP包
datagramPacket=newDatagramPacket(receMsgs,receMsgs.length);
//receive()來等待接收UDP數據報
datagramSocket.receive(datagramPacket);

/******解析數據報****/
StringreceStr=newString(datagramPacket.getData(),0,datagramPacket.getLength());
System.out.println("ServerRece:"+receStr);
System.out.println("ServerPort:"+datagramPacket.getPort());

/*****返回ACK消息數據報*/
//組裝數據報
byte[]buf="Ireceivethemessage".getBytes();
DatagramPacketsendPacket=newDatagramPacket(buf,buf.length,datagramPacket.getAddress(),datagramPacket.getPort());
//發送消息
datagramSocket.send(sendPacket);
}catch(SocketExceptione){
e.printStackTrace();
}catch(IOExceptione){
e.printStackTrace();
}finally{
//關閉socket
if(datagramSocket!=null){
datagramSocket.close();
}
}
}
}

2)client


/***
*UDPclientClient端
***/
publicclassUdpClient{

privateStringsendStr="SendString";
privateStringnetAddress="127.0.0.1";
privatefinalintPORT_NUM=5066;

;
;

publicUdpClient(){
try{

/***發送數據***/
//初始化datagramSocket,注意與前面Server端實現的差別
datagramSocket=newDatagramSocket();
//使用DatagramPacket(bytebuf[],intlength,InetAddressaddress,intport)函數組裝發送UDP數據報
byte[]buf=sendStr.getBytes();
InetAddressaddress=InetAddress.getByName(netAddress);
datagramPacket=newDatagramPacket(buf,buf.length,address,PORT_NUM);
//發送數據
datagramSocket.send(datagramPacket);

/***接收數據***/
byte[]receBuf=newbyte[1024];
DatagramPacketrecePacket=newDatagramPacket(receBuf,receBuf.length);
datagramSocket.receive(recePacket);

StringreceStr=newString(recePacket.getData(),0,recePacket.getLength());
System.out.println("ClientReceAck:"+receStr);
System.out.println(recePacket.getPort());


}catch(SocketExceptione){
e.printStackTrace();
}catch(UnknownHostExceptione){
e.printStackTrace();
}catch(IOExceptione){
e.printStackTrace();
}finally{
//關閉socket
if(datagramSocket!=null){
datagramSocket.close();
}
}
}
}

⑵ 一段java UDP傳輸的問題

我對著你的代拿塵擾困碼原封不動寫了出來測試一下是沒有任何問題的

我覺得是你的測試方法出消李禪錯了,應該開兩個cmd窗口先運行服務端程序,不要關運行服務端程序的窗口,它會一直阻塞在那裡,然後運行發送數據的程序,這時服務端程序就會列印出發送的數據。至於127.0.0.1是不會有錯的它是本機回送地址

⑶ 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數據報及一個偽包頭而得到的。但校驗和的計算方法與通用的一樣,都是累加求和。
不危險,可以打開

⑷ Java UDP 編程,通過Datagram傳輸list

二個方法,1位元組傳輸,使用對象序列化答轎.ObjectInputStream ObjectOutputStream ,
2.字清讓肆符傳輸,轉json傳輸滑迅

⑸ javaudp一直傳輸怎麼回事

網路卡頓。辯寬禪javaudp一直傳輸是因為網路卡頓攜塵導致的,更換網路重新傳輸即巧讓可解決此問題。該協議是一種用戶數據傳世協議。

⑹ java 中怎麼使用UDP

發送步驟:

使用 DatagramSocket(int port) 建立socket(套間字)服務。

將數據打包到DatagramPacket中去

通過socket服務發送 (send()方法)

關閉資源

importjava.io.IOException;
importjava.net.*;

publicclassSend{

publicstaticvoidmain(String[]args){

DatagramSocketds=null;//建立套間字udpsocket服務

try{
ds=newDatagramSocket(8999);//實例化套間字,指定自己的port
}catch(SocketExceptione){
System.out.println("Cannotopenport!");
System.exit(1);
}

byte[]buf="Hello,Iamsender!".getBytes();//數據
InetAddressdestination=null;
try{
destination=InetAddress.getByName("192.168.1.5");//需要發送的地址
}catch(UnknownHostExceptione){
System.out.println("Cannotopenfindhost!");
System.exit(1);
}
DatagramPacketdp=
newDatagramPacket(buf,buf.length,destination,10000);
//打包到DatagramPacket類型中(DatagramSocket的send()方法接受此類,注意10000是接受地址的埠,不同於自己的埠!)

try{
ds.send(dp);//發送數據
}catch(IOExceptione){
}
ds.close();
}
}

接收步驟:

使用 DatagramSocket(int port) 建立socket(套間字)服務。(我們注意到此服務即可以接收,又可以發送),port指定監視接受埠。

定義一個數據包(DatagramPacket),儲存接收到的數據,使用其中的方法提取傳送的內容

通過DatagramSocket 的receive方法將接受到的數據存入上面定義的包中

使用DatagramPacket的方法,提取數據。

關閉資源。

importjava.net.*;

publicclassRec{

publicstaticvoidmain(String[]args)throwsException{

DatagramSocketds=newDatagramSocket(10000);//定義服務,監視埠上面的發送埠,注意不是send本身埠

byte[]buf=newbyte[1024];//接受內容的大小,注意不要溢出

DatagramPacketdp=newDatagramPacket(buf,0,buf.length);//定義一個接收的包

ds.receive(dp);//將接受內容封裝到包中

Stringdata=newString(dp.getData(),0,dp.getLength());//利用getData()方法取出內容

System.out.println(data);//列印內容

ds.close();//關閉資源
}
}

⑺ Java UDP文件傳輸,傳輸後文件損壞......

UDP是並不是可靠的傳輸方式,位元組序列並沒有得到校驗,所頌襪局以傳輸文件時出現錯誤也是難免的.因為,txt,doc和jpg本身即使出錯也不會影響打開,頂多出現個別字元或是個別像素錯誤不會影響整野讓體,而exe則是cpu的指令執行序列你錯一個就將會導致程序無法執行,如果好核你懂hash的話可以將文件hash一下看看傳輸前後的hash碼是否相同若不相同說明了傳輸過程出現了錯誤需要重傳.
UDP一般應用在海量的並對准確性要求不高的傳輸上,並一般伴隨有重傳機制

⑻ java中UDP文件傳輸怎麼實現

java UDP連接,如果要發送文件的話,你只能自己定義一系列的協議
因為TCP UDP 雙方發送都是二進制數據
那麼這個實現非常復雜
得不停的發送數據,寫數據,建議使用http協議

⑼ 如何用java實現UDP的可靠傳輸

我記憶中可靠的傳輸應該類似TCP的三次握手:
1.發送方向接收方發送一個隨機數。
2.接收方收到隨機數後將其+1,再回傳給發送方。
3.發送方收到隨機數判斷其是否被+1,如果是代表雙方的傳遞線路是通暢的,可以正式開始傳送數據。

⑽ 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相關的資料

熱點內容
伺服器端渲染的數據怎麼爬 瀏覽:159
壓縮空氣噴射器 瀏覽:488
python提高效率 瀏覽:796
華為文件管理怎麼樣輸入解壓碼 瀏覽:800
深思加密狗初始化 瀏覽:566
黃金崩潰pdf 瀏覽:309
華為特定簡訊息加密 瀏覽:375
微機原理與單片機技術李精華答案 瀏覽:816
pic12c508單片機 瀏覽:309
androidgps調用 瀏覽:226
金文編pdf 瀏覽:445
14乘87減147的簡便演算法 瀏覽:473
怎麼創建edu文件夾 瀏覽:721
演算法的基礎問題 瀏覽:256
蘋果手機怎麼選擇app支付 瀏覽:856
訪問加密伺服器失敗怎麼回事 瀏覽:439
程序員每天跑步5公里 瀏覽:789
黨員對程序員有幫助么 瀏覽:550
慢跑穿壓縮衣還是緊身衣 瀏覽:214
什麼伺服器引擎最好 瀏覽:497