當前位置:首頁 » 編程語言 » java的udp

java的udp

發布時間: 2023-02-01 04:27:52

1. 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();//關閉資源
}
}

2. java udp 請求會阻塞嗎

java中UDP通信,兩邊都接收不了,都是阻塞狀態,要先運行UdpServer2,因為它是伺服器

3. java中UDP文件傳輸怎麼實現

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

4. java中UDP通信,兩邊都怎麼也接收不了,都是阻塞狀態。

你要先運行UdpServer2,因為它是伺服器

5. Java udp如何通過一個對象完成接收和發送數據

//注意,本地ip以及埠,廣播Ip以及埠,可根據自己的電腦實際情況定.我的三段是2
//思路:我用的udp啟動服務端,進行偵聽,如果有消息,就該頻段廣播一次..
//客戶端使用多線程,一個發送服務端,一個接受廣播..就當我復習了一次...!
importjava.io.IOException;
importjava.net.DatagramPacket;
importjava.net.DatagramSocket;
importjava.net.InetAddress;
importjava.net.InetSocketAddress;
importjava.net.SocketAddress;
importjava.util.Scanner;
publicclassUdpTest{
classSendTest{
privateintcount=1;
privateScannersc;
privatebyte[]by,by2;
privateInetAddressip;
privateSocketAddresssd1,sd2;
privateDatagramSocketds,ds2;
privateDatagramPacketdp,dp2;
SendTest(StringipName,intport)throwsException{
sc=newScanner(System.in);
ip=InetAddress.getByName(ipName);
sd1=newInetSocketAddress(ip,port);//發送的目標:ip+埠
sd2=newInetSocketAddress(19823);//己方,省略ip,默認自己本地地址
ds=newDatagramSocket();//參數為自己的標識
//接受
by2=newbyte[1024];
ds2=newDatagramSocket(sd2);
send();
}
privatevoidsend()throwsIOException{
newThread(){
publicvoidrun(){
while(true){
by=sc.nextLine().getBytes();
dp=newDatagramPacket(by,by.length,sd1);//數組,數組長度,目標ip+埠
try{
ds.send(dp);
}catch(IOExceptione){
e.printStackTrace();
}//推送服務;
System.out.println("老馬第:"+count+++"條信息發送完成!");
}
}
}.start();
newThread(){
publicvoidrun(){
while(true){
dp2=newDatagramPacket(by2,by2.length);
try{
ds2.receive(dp2);
System.out.println("老馬接受到一條廣播可能來自老宋:"+newString(by2,0,dp2.getLength()));
}catch(IOExceptione){
e.printStackTrace();
}
}
}
}.start();
}
}
classAccepTest{
privatebyte[]by;
privateSocketAddresssd1,sd2;
privateDatagramSocketds;
privateDatagramPacketdp;
privateintcount=0;
AccepTest()throwsException{
by=newbyte[1024];
sd1=newInetSocketAddress("192.168.2.255",19823);//廣播
sd2=newInetSocketAddress(19822);//己方,省略ip,默認自己本地地址
ds=newDatagramSocket(sd2);//參數為自己的標識,這是用來接受的.....
accepts();
}
privatevoidaccepts()throwsIOException{
while(true){
count++;
System.out.println("老宋的伺服器接受第:"+count+"次數據:...");
dp=newDatagramPacket(by,by.length);//數組,數組長度,僅僅用來接收;
ds.receive(dp);//接受服務;
Stringstr=newString(by,0,dp.getLength());
System.out.println("老宋接受到數據--------->"+str);
System.out.println();
//廣播..
by=("插個廣播:"+str+"....誰發的??").getBytes();
dp=newDatagramPacket(by,by.length,sd1);
ds.send(dp);
}
}
}
publicstaticvoidmain(String[]args)throwsException{
newThread(){
publicvoidrun(){
try{
newUdpTest().newAccepTest();
}catch(Exceptione){
e.printStackTrace();
}
}
}.start();
newThread(){
publicvoidrun(){
try{
newUdpTest().newSendTest("127.0.0.1",19822);
}catch(Exceptione){
e.printStackTrace();
}
}
}.start();
}
}

6. JAVA問題 UDP協議中的埠問題

在Java中操縱UDP

使用位於JDK中Java.net包下的DatagramSocket和DatagramPacket類,可以非常方便地控制用戶數據報文。

在描述它們之前,必須了解位於同一個位置的InetAddress類。InetAddress實現了Java.io. Serializable介面,不允許繼承。它用於描述和包裝一個Internet IP地址,通過三個方法返回InetAddress實例:

getLocalhost():返回封裝本地地址的實例。

getAllByName(String host):返回封裝Host地址的InetAddress實例數組。

getByName(String host):返回一個封裝Host地址的實例。其中,Host可以是域名或者是一個合法的IP地址。

DatagramSocket類用於創建接收和發送UDP的Socket實例。和Socket類依賴SocketImpl類一樣,DatagramSocket類的實現也依靠專門為它設計的DatagramScoketImplFactory類。DatagramSocket類有3個構建器:

DatagramSocket():創建實例。這是個比較特殊的用法,通常用於客戶端編程,它並沒有特定監聽的埠,僅僅使用一個臨時的。

DatagramSocket(int port):創建實例,並固定監聽Port埠的報文。

DatagramSocket(int port, InetAddress localAddr):這是個非常有用的構建器,當一台機器擁有多於一個IP地址的時候,由它創建的實例僅僅接收來自LocalAddr的報文。

值得注意的是,在創建DatagramSocket類實例時,如果埠已經被使用,會產生一個SocketException的異常拋出,並導致程序非法終止,這個異常應該注意捕獲。DatagramSocket類最主要的方法有4個:

Receive(DatagramPacket d):接收數據報文到d中。receive方法產生一個「阻塞」。

Send(DatagramPacket d):發送報文d到目的地。

SetSoTimeout(int timeout):設置超時時間,單位為毫秒。

Close():關閉DatagramSocket。在應用程序退出的? 焙潁?ǔ;嶂鞫?頭拋試矗?乇誗ocket,但是由於異常地退出可能造成資源無法回收。所以,應該在程序完成時,主動使用此方法關閉Socket,或在捕獲到異常拋出後關閉Socket。

「阻塞」是一個專業名詞,它會產生一個內部循環,使程序暫停在這個地方,直到一個條件觸發。

DatagramPacket類用於處理報文,它將Byte數組、目標地址、目標埠等數據包裝成報文或者將報文拆卸成Byte數組。應用程序在產生數據包是應該注意,TCP/IP規定數據報文大小最多包含65507個,通常主機接收548個位元組,但大多數平台能夠支持8192位元組大小的報文。DatagramPacket類的構建器共有4個:

DatagramPacket(byte[] buf, int length, InetAddress addr, int port):從Buf數組中,取出Length長的數據創建數據包對象,目標是Addr地址,Port埠。

DatagramPacket(byte[] buf, int offset, int length, InetAddress address, int port):從Buf數組中,取出Offset開始的、Length長的數據創建數據包對象,目標是Addr地址,Port埠。

DatagramPacket(byte[] buf, int offset, int length):將數據包中從Offset開始、Length長的數據裝進Buf數組。

DatagramPacket(byte[] buf, int length):將數據包中Length長的數據裝進Buf數組。

DatagramPacket類最重要的方法就是getData()了,它從實例中取得報文的Byte數組編碼。

7. 用Java編寫簡單的UDP網路通信程序

Java中封裝了大量的socket API 為編寫網路通信程序提供了極大的方便 在計算機網路的學習中 大家都已熟練掌握了TCP/UDP的基本原理 在此不在贅述 僅給出接收端和發送端的源代碼 供大家討論學習 發送端代碼如下:import java io *;import java lang *;import *;public class uclient{private DatagramSocket cli;private DatagramPacket pac;private byte *** [];private String sen;public uclient(){Init();}public void Init(){try{//指定埠號 避免與其他應用程序發生沖突cli=new DatagramSocket( ); *** =new byte[ ];sen= UDP方式發送數據 ; *** =sen getBytes();pac=new DatagramPacket( *** *** length InetAddress getByName( localhost ) );cli send(pac);}catch(SocketException se){se printStackTrace();}catch(IOException ie){ie printStackTrace();}}public static void main(String args[]){new uclient();}}接收端數據:import java io *;import java lang *;import *;public class userve{private DatagramSocket ser;private DatagramPacket pac;private byte rb[];private String rev;public userve(){Init();}public void Init(){try{ser=new DatagramSocket( );rb=new byte[ ];pac=new DatagramPacket(rb rb length);rev= ;int i= ;while(i== )//無數據 則循環{ser receive(pac);i=pac getLength();//接收數據if(i> ){//指定接收到數據的長度 可使接收數據正常顯示 開始時很容易忽略這一點rev=new String(rb pac getLength());System out println(rev);i= ;//循環接收}}}catch(Exception e){e printStackTrace();}}public static void main(String args[]){new userve();}} lishixin/Article/program/Java/hx/201311/26023

8. java 怎麼用UDP實時接收數據

我自己寫的代碼:

importjava.io.IOException;
importjava.net.DatagramPacket;
importjava.net.DatagramSocket;
importjava.net.InetAddress;
importjava.net.SocketException;
importjava.net.UnknownHostException;
publicclassUdpRecvDemo
{

publicstaticvoidmain(String[]args)throwsIOException
{
Recv();
}

publicstaticvoidRecv()throwsIOException
{
System.out.println("接受開始......");
DatagramSocketds=newDatagramSocket(3388);
while(true)
{
byte[]buf=newbyte[1024];
DatagramPacketdp=newDatagramPacket(buf,buf.length);
ds.receive(dp);
System.out.println(ds);
Stringip=dp.getAddress().getHostAddress();
intport=dp.getPort();
Stringtext=newString(dp.getData(),0,dp.getLength());
if(text.equals("exit"))
{
System.out.println(ip+"退出會話......");
break;
}
System.out.println(ip+":"+port+"===>me"+text);
}

ds.close();
}
}
熱點內容
校園網內怎麼搭建伺服器 發布:2024-05-08 11:28:33 瀏覽:72
adb伺服器是什麼資料庫 發布:2024-05-08 11:27:43 瀏覽:363
一鍵編譯vscode 發布:2024-05-08 11:27:37 瀏覽:869
哪個型號的安卓機性價比好 發布:2024-05-08 11:05:10 瀏覽:657
蘋果存儲空在哪裡 發布:2024-05-08 10:37:16 瀏覽:641
python獲取系統時間 發布:2024-05-08 10:32:24 瀏覽:634
瀏覽器上傳文件 發布:2024-05-08 10:31:17 瀏覽:92
編程強度高 發布:2024-05-08 10:24:59 瀏覽:279
電腦如何查看型號和配置 發布:2024-05-08 10:19:56 瀏覽:421
大地電子保單pdf密碼多少 發布:2024-05-08 09:54:21 瀏覽:861