1、使用無連接的數據報(UDP)進行通信
(1)什么是Datagram?
- 數據報是網上傳輸的獨立數據包,數據報是否能夠正確地到達目的地,到達的時間,順序,內容的正確性均沒有保障。
(2)Java中使用Datagram與DatagramPacket類來完成數據報(UDP)進行通信。
(3)DatagramSocket類利用UDP協議來實現客戶與服務器的Socket。
(4)send:發送數據報
(5)recieve:接收數據報
2、基于UDP的Socket編程
本個示例包含兩端代碼:UDPServer和UDPClient。UDPServer先啟動,并等待UDPClient和自己打招呼。當UDPClient和自己打招呼后,UDPServer回應UDPClient。具體代碼如下:
(1)UDPServer
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
/**
* 使用UDP進行通信
* 服務端
* @author Chuan
*
*/
public class UDPServer
{
public static void main(String[] args) throws IOException
{
DatagramSocket ds = new DatagramSocket(5000);
/*
* 接收客戶端的消息
*/
//創建用于接收客戶端發送的數據報的數據報
byte[] buffer = new byte[1024];
DatagramPacket packetRec = new DatagramPacket(buffer, buffer.length);
ds.receive(packetRec);
//處理接收到的數據
String msg = new String(buffer, 0, packetRec.getLength()); //packetRec.getLength()
System.out.println(msg);
/*
* 向客戶端發送消息
*/
byte[] str = "welcom".getBytes();
DatagramPacket packetSend = new DatagramPacket(str, str.length,
packetRec.getAddress(),packetRec.getPort());
ds.send(packetSend);
//關閉socket
ds.close();
}
}
(2)UDPClient
/**
* 使用UDP進行通信
* 客戶端
* @author Chuan
*
*/
public class UDPClient
{
public static void main(String[] args) throws IOException
{
DatagramSocket dS = new DatagramSocket();
/*
* 向服務端發送消息
*/
byte[] str = "hello".getBytes();
DatagramPacket dpSend = new DatagramPacket(str, str.length,
InetAddress.getByName("localhost"),5000);
dS.send(dpSend);
/*
* 接收服務端的消息
*/
byte[] msg = new byte[1024];
DatagramPacket dpRecieve = new DatagramPacket(msg, msg.length);
dS.receive(dpRecieve);
System.out.println(new String(msg, 0, dpRecieve.getLength()));
dS.close();
}
}