基於UDP協議的通信是不安全的,因為輸出的包沒有標記,接收方無法判別文件是否丟失
UDP協議兩個最重要的關鍵字為:
datagramsocket和datagrampacket
datagrampacket是用來打包數據的,將接收方的IP地址和接口都寫進包內
datagramsocket只負責寄出這個包裹,它自己會傳輸到指定端口
接收方可通過傳送過來的包裹獲取其中的socketAddress
並通過這個地址信息返回信息給寄出方
代碼示例:
* 客户端
* @author 金前旺
*
*/
public class Datagramclient {
public static void main(String[] args) {
InetAddress ia = null;
DatagramPacket packet = null;
DatagramSocket socket = null;
DatagramPacket dp = null;
String str ="姓名:金前旺 密碼:123";
byte[] b = str.getBytes();
try {
//通過InetAddress.getByName()可以獲取輸入括號內地址的ip參數
ia = InetAddress.getByName("localhost");
//將數據打包,參數:數組,數組長度,對方IP,端口
packet = new DatagramPacket(b, b.length, ia, 5000);
//通過new DatagramSocket()可以獲取寄出郵件的對象
socket = new DatagramSocket();
//將郵件寄出
socket.send(packet);
//然後接受對方返回的信息
byte[] by = new byte[1024];
//準備一個接受的數組,並將其打包成DatagramPacket對象
dp = new DatagramPacket(by, by.length);
//然後調用socket接受郵包
socket.receive(dp);
//然後拆包
String st = new String(dp.getData(), 0, dp.getData().length);
System.out.println("主機説"+st);
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (SocketException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
socket.close(); }
* 主機端
* @author 金前旺
*
*/
public class DatagramServer {
public static void main(String[] args) {
DatagramSocket socket = null;
//首先準備一個數組
byte[] b = new byte[1024];
//將數組打包
DatagramPacket packet = new DatagramPacket(b, b.length);
//然後獲取DatagramSocket對象,用來發出和接受郵包
try {
socket = new DatagramSocket(5000);
//然後接受寄來的郵包
socket.receive(packet);
//拆包
String str = new String(packet.getData(), 0, packet.getData().length);
System.out.println("客户説:"+str);
//然後給個回覆
String s= "驗證無誤,允許登陸!";
byte[] by = s.getBytes();
//獲得對方的IP地址和接口信息
SocketAddress sa = packet.getSocketAddress();
//有了IP和接口地址我們就可以寄出郵包了
DatagramPacket dp = new DatagramPacket(by, by.length, sa);
//然後通過socket將這個郵包寄出去
socket.send(dp);
} catch (SocketException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
if (socket!=null) {
socket.close();
}
本文章為轉載內容,我們尊重原作者對文章享有的著作權。如有內容錯誤或侵權問題,歡迎原作者聯繫我們進行內容更正或刪除文章。