您好,登錄后才能下訂單哦!
小編給大家分享一下java中UDP通信客戶端與服務器端的示例分析,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
具體如下:
最初Udp是以字節為單位進行傳輸的,所以有很大的限制
服務器端:
import java.net.*; public class TestUdpServer { public static void main(String[] args) throws Exception { byte[] buf = new byte[1024]; DatagramPacket dp = new DatagramPacket(buf,buf.length); // try { DatagramSocket ds = new DatagramSocket(2345); while(true) { ds.receive(dp); System.out.println(new String(buf,0,dp.getLength())); // } // } catch (Exception e) { // e.printStackTrace(); } } }
用戶端:
import java.net.*; public class TestUdpClient { public static void main(String[] args) throws Exception { byte[] buf = new byte[1024]; buf = (new String("hello")).getBytes(); DatagramPacket dp = new DatagramPacket(buf,buf.length,new InetSocketAddress("127.0.0.1",2345)); // try { DatagramSocket ds = new DatagramSocket(5679); ds.send(dp); ds.close(); // } catch (Exception e) { // e.printStackTrace(); // } } }
注:由于必須以字節為單位進行傳輸,Udp的傳輸用了一個容器類的東西,用來接收字節
先建一個字節數組,然后以這個數組創建容器。用來傳輸數據。
實例:傳輸一個Long類型的數據
服務器端:
import java.io.*; import java.net.*; public class UdpServer { public static void main(String[] args) throws Exception { byte[] buf = new byte[1024]; DatagramPacket dp = new DatagramPacket(buf,buf.length); DatagramSocket ds = new DatagramSocket(2345); while(true) { ByteArrayInputStream is = new ByteArrayInputStream(buf); DataInputStream dis = new DataInputStream(is); ds.receive(dp); System.out.println(dis.readLong()); } } }
用戶端:
import java.io.*; import java.net.*; public class UdpClient { public static void main(String[] args) throws Exception { Long n = 10000L; ByteArrayOutputStream os = new ByteArrayOutputStream(); DataOutputStream dos = new DataOutputStream(os); dos.writeLong(n); byte[] buf = new byte[1024]; buf = os.toByteArray(); System.out.println(buf.length); DatagramPacket dp = new DatagramPacket(buf,buf.length, new InetSocketAddress("127.0.0.1",2345)); DatagramSocket ds = new DatagramSocket(5679); ds.send(dp); ds.close(); } }
注:由于Udp是以字節為單位進行傳輸的,所以要用到ByteArray的輸入和輸出流用來進行數據的轉換。
另外,相較于Output流,Input流在構建的時候需要一個數組作為參數,用來存放數據。
在基本的Udp傳輸的基礎上,代碼分為兩部分,一部分是把傳輸或接受的Long類型數據轉換為byte類型的數據,然后是基本的數據傳輸。
另一方面,直接的字節流不能轉換為Long類型,同理,剛接收的數據是字節類型,直接打印(System.out.println)是以字符串類型輸出的,都需要通過Data的數據流進行轉換。
以上是“java中UDP通信客戶端與服務器端的示例分析”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。