欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

Java數據報(UDP)編程

系統 1826 0

一般說明

在TCP/IP協議族中,UDP和TCP同樣位于傳輸層,用戶數據報是UDP協議中的概念.

UDP協議提供面向事務的簡單不可靠信息傳送服務,它不提供對 IP 協議的可靠機制、流控制以及錯誤恢復功能.

UDP 協議基本上是IP 協議與上層協議的接口,從整個用戶數據在各層的包裝看,UDP報文格式相當簡單:

16 32bit
Source port源端口 Destination port目標端口
Length 報文長度(單位是字節,包括首部和用戶數據區) Checksum(校驗和)
Data


由于校驗和的原因,UDP還引入了偽首部,這導致了UDP和IP層的關系過于密切,破壞了分層原則.

Java數據報支持

包java.net中提供了兩個類DatagramSocket和DatagramPacket用來支持數據報通信,DatagramSocket用于在程序之間建立傳送數據報的通信連接, DatagramPacket則用來表示一個數據報。

DatagramSocket代表發送和接收數據報的套接字,一個數據報套接字是為包遞送服務的發送和接收點,在一個數據報套接字上,每個被發送和接收的包都被獨立的尋址和路由,從一臺機器到另一臺機器上發送的多個包有不同的路由,任意的抵達順序.

對于DatagramSocket,UDP廣播發送總是使能的(那是缺省設置).為了接收廣播包這個類實例應該綁定到通用地址(wildcard address).在某些實現中,當被綁定到更多特定地址上的時候廣播包也可以接收.

例如:

DatagramSocket s = new DatagramSocket(null);
s.bind(new InetSocketAddress(8888));
這等同于:
DatagramSocket s = new DatagramSocket(8888);
兩種情況都會創建一個能在端口8888上接收廣播的DatagramSocket實例.

<!-- ======== NESTED CLASS SUMMARY ======== --><!-- =========== FIELD SUMMARY =========== --><!-- ======== CONSTRUCTOR SUMMARY ======== --> <!-- -->

Constructor Summary
DatagramSocket ()
Constructs a datagram socket and binds it to any available port on the local host machine.
protected DatagramSocket ( DatagramSocketImpl impl)
Creates an unbound datagram socket with the specified DatagramSocketImpl.
DatagramSocket (intport)
Constructs a datagram socket and binds it to the specified port on the local host machine.
DatagramSocket (intport, InetAddress laddr)
Creates a datagram socket, bound to the specified local address.
DatagramSocket ( SocketAddress bindaddr)
Creates a datagram socket, bound to the specified local socket address.

其中,port指明socket所使用的端口號,如果未指明端口號,則把socket連接到本地主機上一個可用的端口。laddr指明一個可用的本地地址。給出端口號時要保證不發生端口沖突,否則會生成SocketException類例外。

用數據報方式編寫通信程序時,通信雙方,首先都要建立一個DatagramSocket對象,用來接收或發送數據報,然后使用DatagramPacket類對象作為傳輸數據的載體。下面看一下DatagramPacket的構造方法 :

Constructor Summary
DatagramPacket (byte[]buf, intlength)
Constructs a DatagramPacket for receiving packets of length length .
DatagramPacket (byte[]buf, intlength, InetAddress address, intport)
Constructs a datagram packet for sending packets of length length to the specified port number on the specified host.
DatagramPacket (byte[]buf, intoffset, intlength)
Constructs a DatagramPacket for receiving packets of length length , specifying an offset into the buffer.
DatagramPacket (byte[]buf, intoffset, intlength, InetAddress address, intport)
Constructs a datagram packet for sending packets of length length with offset ioffset to the specified port number on the specified host.
DatagramPacket (byte[]buf, intoffset, intlength, SocketAddress address)
Constructs a datagram packet for sending packets of length length with offset ioffset to the specified port number on the specified host.
DatagramPacket (byte[]buf, intlength, SocketAddress address)
Constructs a datagram packet for sending packets of length length to the specified port number on the specified host.

可以看出,有兩個供接收的構造器和四個供發送的構造器.其中,buf中存放數據報數據,length為數據報中數據的長度,address和port旨明目的地址,offset指明了數據報的位移量。

Java組播支持

MulticastSocket 多播數據報套接字。這個組播套接字對于收發IP多播數據包是很有用的,它擴展了DatagramSocket,在其上附加了加入internet上多播組的方法。一個多播組由D類IP地址和標準UDP端口指定,D類IP范圍是224.0.0.0 to 239.255.255.255,其中224.0.0.0被保留不為它用。

它有三個構造器:

Constructor Summary
MulticastSocket ()
Create a multicast socket.
MulticastSocket (intport)
Create a multicast socket and bind it to a specific port.
MulticastSocket ( SocketAddress bindaddr)
Create a MulticastSocket bound to the specified socket address.

基本上,沒有指定端口,只為發送,指定端口可收發,多址主機會用套接字地址。

一,DatagramSocket類;DatagramPacket類;InetAddress類

構造函數 public DatagramSocket();
public DatagramSocket(int port);
public DatagramSocket(InetAddress laddr);

close()方法

send(DatagramPacket p)

receive(DatagramPacket p)

接受方的 DatagramPacket public DatagramPacket (byte[]buf, intlength)
發送方的 DatagramPacket public DatagramPacket (byte[]buf, intlength, InetAddressaddress, intport

最簡單的UDP程序:

發送程序:UdpSend.java

import java.net. * ;
public class UdpSend
... {
public static void main(String[]args) throws Exception
... {
DatagramSocketds
= new DatagramSocket();
Stringstr
= " helloworld " ;
DatagramPacketdp
= new DatagramPacket(str.getBytes(),str.length(),
InetAddress.getByName(
" 192.168.0.25 " ), 3000 );
ds.send(dp);
ds.close();
}

}

接收程序:UdpRecv.java

import java.net. * ;
public class UdpRecv
... {
public static void main(String[]args) throws Exception
... {
DatagramSocketds
= new DatagramSocket( 3000 );
byte []buf = new byte [ 1024 ];
DatagramPacketdp
= new DatagramPacket(buf, 1024 );
ds.receive(dp);
StringstrRecv
= new String(dp.getData(), 0 ,dp.getLength()) +
" from " + dp.getAddress().getHostAddress() + " : " + dp.getPort();
System.out.println(strRecv);
ds.close();
}

}

Java數據報(UDP)編程


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: www.youjizz.com亚洲 | 国产午夜精品一区二区三区 | 免费人成年短视频在线观看免费网站 | 国产一区二区在线免费观看 | 美女在线视频网站 | 污污成人一区二区三区四区 | 国产精品美女久久久久aⅴ国产馆 | 久久草资源费视频在线观看 | 日韩精品在线播放 | 久久综合在线 | 亚洲一区二区中文字幕 | 国产精品国产三级国产aⅴ入口 | 欧美精品成人a多人在线观看 | 日本精品一二三区 | 亚洲精品久久久久综合中文字幕 | 久久久久国产精品一区 | 欧美日韩在线免费观看 | 国产精品69久久久久水密桃 | 黄毛片视频 | 中国一级毛片在线视频 | 福利国产在线 | 国产精品成人一区二区 | 一级做a爰片性色毛片2021 | 久草这里只有精品 | 国产精品尤物在线观看一区 | 国产亚洲欧美视频 | 亚洲韩精品欧美一区二区三区 | 亚洲国产中文字幕 | 精品一区二区三区在线观看 | 欧美老妇交乱视频 | 狠狠操电影| 亚洲日韩欧洲无码av夜夜摸 | 国产免费观看一级国产 | 久久久精品免费观看 | 欧美精品无需播放器在线观看 | 波多野结衣亚洲一区二区三区 | 天天搞天天搞 | www.麻豆| 在线播放国产精品 | 久久一本久综合久久爱 | 成人一区二区三区在线观看 |