天天看點

JAVA Socket程式設計(一)之UDP通信

常見的通訊協定有udp和tcp。

--将資料及源、目的封裝在資料包中,不需要建立連接配接;

--每個資料包的大小限制在64k以内;

--因無連接配接,是不可靠協定;

--不需要建立連接配接,是以傳輸速度快,但是容易丢失資料;

總之:Udp是面向無連接配接的通訊協定,傳輸資料時,不管對端服務是否啟動,直接發送。

日常中使用Udp技術的軟體有:飛秋、視訊會議等;

分為用戶端、伺服器端

伺服器段代碼如下:

1 package udp;
 2 
 3 import java.net.DatagramPacket;
 4 import java.net.DatagramSocket;
 5 
 6 public class Server {
 7     public static void main(String[] args) {
 8         DatagramSocket ds=null;
 9         DatagramPacket dp=null;
10         try {
11             ds=new DatagramSocket(9000);//服務端口
12             byte[] b=new byte[1024];//用于接收用戶端的資料
13             dp=new DatagramPacket(b, b.length);
14             ds.receive(dp);//接收
15             String me=new String (dp.getData(),0,dp.getLength());//得到字元串
16             System.out.println(me);
17             
18             
19             
20     
21             ds=new DatagramSocket();
22             String me2="ok";
23             dp=new DatagramPacket(me2.getBytes(), me2.length(), dp.getAddress(), dp.getPort());//直接根據資料報擷取到擷取資料的位址,端口
24             ds.send(dp);//響應資料
25         } catch (Exception e) {
26             // TODO: handle exception
27             e.printStackTrace();
28         }
29     }
30 }


      

用戶端代碼如下:

1 package udp;
 2 
 3 import java.net.DatagramPacket;
 4 import java.net.DatagramSocket;
 5 import java.net.InetAddress;
 6 
 7 public class Client {
 8     public static void main(String[] args) {
 9         DatagramSocket ds=null;
10         DatagramPacket dp=null;
11         try {
12             ds=new DatagramSocket();
13             String message="hello";
14             dp=new DatagramPacket(message.getBytes(), message.length(), InetAddress.getByName("localhost"), 9000);
15             ds.send(dp);
16             
17         
18             byte[] b=new byte[1024];
19             dp=new DatagramPacket(b, b.length);
20             ds.receive(dp);
21             String me=new String (dp.getData(),0,dp.getLength());
22             System.out.println(me);
23             
24         } catch (Exception e) {
25             // TODO: handle exception
26             e.printStackTrace();
27         }
28     }
29 }      

tcp程式設計檢視:http://www.cnblogs.com/GH0522/p/8119533.html

歡迎大家一起說出自己的想法。