UDP編程示例
服務器端:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
package socket; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.SocketException; public class UDPServer { public static void main(String[] args) throws IOException { byte [] buf = new byte [ 1024 ]; DatagramPacket dp = new DatagramPacket(buf, buf.length); //聲明一個用來接收數據的“包裹” DatagramSocket ds = new DatagramSocket( 5678 ); //指定的是UDP中的端口號5678,在TCP中,還有另外一個端口號為5678的端口 while ( true ){ ds.receive(dp); //阻塞式的 System.out.println( new String(buf, 0 ,dp.getLength())); //dp中獲取的數據的長度 } } } |
客戶端:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
package socket; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetSocketAddress; import java.net.SocketException; public class UDPClient { public static void main(String[] args) throws IOException { byte [] buf = new String( "Hello" ).getBytes(); //UDP是無連接的,所以要在發送的數據包裹中指定要發送到的ip:port DatagramPacket dp = new DatagramPacket(buf, buf.length, new InetSocketAddress( "127.0.0.1" , 5678 )); DatagramSocket ds = new DatagramSocket( 9999 ); //指明發送端的端口號 ds.send(dp); ds.close(); } } |
說明:
1. 嚴格意義上來講,UDP沒有server和client之分,不像TCP中有ServerSocket和Socket,UDP中只有DatagramSocket。
2. UDP和TCP的端口是分開的,例如UDP有一個端口號為5678的端口,TCP也有一個端口號為5678的端口。
3. UDP是無連接的,所以要在發送的數據包裹中指定要發送到的ip:port。
4. 如果要發送long、int等類型的數據,則需要使用到ByteArrayOutputStream、DataOutputStream、ByteArrayInputStream、ByteArrayInputStream流類型,如下:
服務器端:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
package socket; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.SocketException; public class UDPServer { public static void main(String[] args) throws IOException { byte [] buf = new byte [ 1024 ]; DatagramPacket dp = new DatagramPacket(buf, buf.length); DatagramSocket ds = new DatagramSocket( 5678 ); ByteArrayInputStream bais = null ; DataInputStream dos = null ; while ( true ){ ds.receive(dp); bais = new ByteArrayInputStream(buf); dos = new DataInputStream(bais); System.out.println(dos.readLong()); } } } |
客戶端:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
package socket; import java.io.ByteArrayOutputStream; import java.io.DataOutputStream; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetSocketAddress; import java.net.SocketException; public class UDPClient { public static void main(String[] args) throws IOException { byte [] buf = null ; long l = 100000L; ByteArrayOutputStream baos = new ByteArrayOutputStream(); DataOutputStream dos = new DataOutputStream(baos); dos.writeLong(l); buf = baos.toByteArray(); DatagramPacket dp = new DatagramPacket(buf, buf.length, new InetSocketAddress( "127.0.0.1" , 5678 )); DatagramSocket ds = new DatagramSocket( 9999 ); ds.send(dp); ds.close(); dos.close(); } } |
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
原文鏈接:http://blog.csdn.net/xiangwanpeng/article/details/53214071