udp編程java
Ⅰ java udp發送和接收埠問題
你是在同一台電腦上測試吧,那肯定不行的,因為一個埠只能給一個程序使用,而你發送要用到1000埠,接收又要用到1000埠,所以肯定是沖突的,但是你用2台電腦測試就不會了。同樣,你先建一個1000埠的server,你再建一個1000埠的server同樣會報錯。ps:你在開了tomcat的情況下,開一個8080的server試試,一樣會報錯,這是常識。
Ⅱ 推薦關於UDP協議的Java編程的書
1.《零基礎學Java電子教程》(機械工業出版社) ,Java程序設計教程(第2版)基礎篇 機械工業出版社 , Java程序設計教程(第2版)進階篇 機械工業出版社2.《JAVA編程思想》3.《鋒利的jQuery》4. 《CSS實戰手冊.第2版》.(美)麥克法蘭5.《Spring揭秘》這些書是我仔細研究過的書,講解的通俗易懂,也很經典,具有代表性。受益匪淺
Ⅲ Java中基於UDP的非阻塞編程
configureBloging(false)
然後注冊監視器,selector.open();
得到句柄;selectionKey key=(SelectionKey)selector.selected();
Ⅳ 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數組編碼。
Ⅳ Java網路編程基本概念是什麼
1、Java網路編程基本概念——主機的網路層
主機網路層定義特定網路介面(如乙太網或WiFi天線)如何通過物理連接將IP數據報發送到本地網路或世界其他地方。在主機網路層中,連接不同計算機的硬體部分(電纜、光纖、無線電波或煙霧信號)有時被稱為網路的物理層。Java程序員不需要擔心這一層,除非出現錯誤,例如計算機後面的插頭脫落或有人切斷了您與外部世界之間的T-1線。換句話說,Java將永遠看不到物理層。
2、Java網路編程基本概念——網路層
Internet層的下一層是主機網路層,這是Java程序員需要考慮的第一層。網際網路層協議定義了數據位和位元組如何組織成更大的組,稱為包,也定義了不同計算機互相查找的定址機制。Internet Protocol (IP)是世界上使用最廣泛的Internet層協議,也是Java唯一了解的Internet層協議。
網際網路協議基本上是兩種協議:IPV4使用32位地址,IPV6使用128位地址,並增加了技術特性來幫助路由。這是兩種完全不同的網路協議,如果沒有特殊的網關/隧道協議,它們甚至不能在同一網路上互操作,但是Java向您隱藏了幾乎所有這些差異。
除了路由和定址之外,網際網路層的第二個作用是使不同類型的主機網路層能夠彼此對話。網際網路路由器在WiFi和乙太網、乙太網和DSL、DSL和光纖往返協議之間進行交換。沒有網際網路層或類似的分層,每台計算機只能與同一類型網路上的其他計算機通信。網際網路層負責使用適當的協議將異類網路彼此連接起來。
3、Java網路編程基本概念——傳輸層
原始數據報有一些缺點。最明顯的缺點是無法保證可靠的傳輸,即使可以保證,也可能在傳輸過程中被損壞。頭檢查只能檢測頭中的損壞,而不能檢測數據報的數據部分。最後,即使數據報沒有損壞地到達了它的目的地,它也可能不能按照發送的順序到達。
傳輸層負責確保按發送的順序接收數據包,確保沒有數據丟失或銷毀。如果數據包丟失,傳輸層要求發送方重新傳輸該數據包。為此,IP網路向每個數據報添加了一個額外的頭,其中包含更多信息。
這個級別有兩個主要協議。第一個是傳輸控制協議(TCP),這是一個昂貴的協議,允許丟失或損壞的數據按照發送順序重新傳輸。第二個協議是用戶數據報協議(User Datagram Protocol, UDP),它允許接收方檢測損壞的數據包,而不保證它們按照正確的順序發送(或者根本不發送)。然而,UDP通常比TCP快。TCP被稱為可靠協議。UDP是不可靠的。
4、Java網路編程基本概念——應用程序層
向用戶交付數據的層稱為應用層。以下三個層定義如何將數據從一台計算機傳輸到另一台計算機。應用層決定數據傳輸後的操作。有HTTP為用戶Web, SMTP, POP, IMAP為用戶電子郵件;FSP, TFTP用於文件傳輸,NFS用於文件訪問;文件共享使用Gnutella和BitTorrent;會話發起協議(SIP)和Skype用於語音通信。此外,您的程序可以在必要時定義自己的應用程序級協議。(頁面)
5、Java網路編程基本概念——IP、TCP、UDP
IP被設計成允許任意兩點之間有多條路由,繞過損壞的路由器來路由數據包。由於兩點之間有多條路由,而且由於網路流量或其他因素,它們之間的最短路徑可能會隨著時間而變化,因此構成特定數據流的數據包可能不會走同一條路由。即使它們全部到達,也可能不是按照它們被發送的順序到達的。為了改進這一基本機制,TCP被放置在IP上,以便連接的兩端可以確認收到的IP數據包,並請求重傳丟失或損壞的數據包。此外,TCP允許接收端上的數據包按照發送的順序重新分組。
然而,TCP有很多開銷。因此,如果單個數據包的丟失不會完全破壞數據,那麼可以使用UDP發送數據包,而不需要TCP提供的保證。UDP是一種不可靠的協議。它不能保證信息包將到達它們的目的地,或者它們將以它們被發送的相同順序到達。
6、Java網路編程基本概念——IP地址和域名
IPv4網路上的每台計算機都有一個4位元組的數字ID。通常在一個點上以四段格式寫,比如192.1.32.90,每個數字是一個無符號位元組,范圍從0到255。IPv4網路上的每台計算機都有一個唯一的四段地址。當數據通過網路傳輸時,包的報頭包括要發送到的機器的地址(目的地址)和要發送到的機器的地址(源地址)。路由上的路由器通過檢查目的地址來選擇發送包的最佳路徑。包含源地址是為了讓收件人知道該對誰進行回復。
雖然計算機可以很容易地處理數字,但人類並不擅長記住它們。因此,域名系統(DNS)被開發出來,用來將容易記住的主機名(如www.12345.com)轉換成數字互聯網地址(如208.201.243.99)。當Java程序訪問網路時,它們需要同時處理數字地址和相應的主機名。這些方法由java.net.InetAddress類提供。
7、Java網路編程基本概念——港口
如果每台計算機一次只做一件事,地址就足夠了。但是現代計算機同時做許多不同的事情。電子郵件需要與FTP請求分開,而FTP請求也需要與Web通信分開。這是通過埠完成的。具有IP地址的每台計算機有數千個邏輯埠(確切地說,每個傳輸層協議有65,535個埠)。這些只是計算機內存中的抽象,不代表任何物理對象,不像USB埠。每個埠在1到65535之間進行數字標識。每個埠可以分配給一個特定的服務。
8、Java網路編程基本概念——一個防火牆
在互聯網上有一些頑皮的人。要排除它們,通常需要在本地網路上設置一個接入點,並檢查進出該接入點的所有流量。位於網際網路和本地網路之間的一些硬體和軟體會檢查所有輸入和輸出的數據,以確保它是防火牆。防火牆通常是路由器的一部分,它將本地網路連接到更大的網際網路,並可以執行其他任務,如網路地址轉換。另外,防火牆可以是單獨的機器。防火牆仍然主要負責檢查進出其網路介面的數據包,根據一組規則接收或拒絕數據包。
本篇《什麼是Java網路編程基本概念?看完這篇文章你一定可以明白》到這里就已經結束了,小編一直認為,某一個編程軟體受歡迎是有一定原因的,首先吸引人的一定是其功能,環球網校的小編祝您java學習之路順利,如果你還想知道更多java知識,也可以點擊本站的其他文章進行學習。
Ⅵ java網路編程:程序問題,接收不到數據
這是java網路編程里的UDPServer和UDPClient之間簡單通信程序啊,等等我看看你的程序再說
你想要的是不是這種效果?
import java.net.*;
class UdpSend{
public static void main(String[] args)throws Exception{
//1.創建udp服務,通過DatagramSocket對象
DatagramSocket ds = new DatagramSocket(8888);//---這兒的埠號不要和UdpRece的一樣
//2.確定數據,並封裝成數據包。
//DatagramPacket(byte[] buf, int length, InetAddress address,
int port)
//構造數據報包,用來將長度為 length 的包發送到指定主機上的
指定埠號。
byte[] buf = "udp shu ju lai le".getBytes();
DatagramPacket dp =
new DatagramPacket(buf,buf.length,InetAddress.getByName
("169.254.200.14"),10000);//----這兒的埠號保持與UdpRece一樣
//3.通過Socket服務,將已有的數據包發送出去。通過send方法。
ds.send(dp);
//4.關閉資源
ds.close();
}
}
最後想說,先運行UdpRece 再運行UdpSend,反過來UdpSend要運行2遍
Ⅶ java中如何檢測本機指定的UDP服務埠是否被佔用並且自動分配一個可用udp埠;
1.埠佔用編譯器會報錯,可以從錯誤看出來是不是埠被佔用。沒有專門的檢測工具和方法
2.DatagramSocket(在Java中使用UDP協議編程的相關類)
用於接收和發送UDP的Socket實例。該類有3個構造函數:
DatagramSocket():通常用於客戶端編程,它並沒有特定監聽的埠,僅僅使用一個臨時的。程序會讓操作系統分配一個可用的埠。
DatagramSocket(int port):創建實例,並固定監聽Port埠的報文。通常用於服務端
DatagramSocket(int port, InetAddress localAddr):這是個非常有用的構建器,當一台機器擁有多於一個IP地址的時候,由它創建的實例僅僅接收來自LocalAddr的報文。
DatagramSocket具有的主要方法如下:
1)receive(DatagramPacket d):接收數據報文到d中。receive方法產生一個「阻塞」。「阻塞」是一個專業名詞,它會產生一個內部循環,使程序暫停在這個地方,直到一個條件觸發。
2)send(DatagramPacket dp):發送報文dp到目的地。
3)setSoTimeout(int timeout):設置超時時間,單位為毫秒。
4)close():關閉DatagramSocket。在應用程序退出的時候,通常會主動釋放資源,關閉Socket,但是由於異常地退出可能造成資源無法回收。所以,應該在程序完成時,主動使用此方法關閉Socket,或在捕獲到異常拋出後關閉Socket。
希望對您有幫助謝謝
Ⅷ java 中UDP網路編程問題
new DatagramSocket();這個沒設置埠號,