文章目錄
-
-
- 一.UDP
-
- 1.常用方法
-
- InetAddress
- DatagramPacket
- DatagramSocket
- 2.接收方
- 3.發送方
- 二.TCP
-
- 1.常用方法
-
- Socket
- ServerSocket
- 2.伺服器端
- 3.用戶端
-
一.UDP
UDP:面向無連接配接通信(發送端不需接收端确認是否能接收),資料不安全,效率高
1.常用方法
InetAddress
-
擷取本地主機static InetAddress getLocalHost()
-
根據域名或IP擷取主機static InetAddress getByName(String host)
-
擷取主機名String getHostName()
-
擷取IP位址String getHostAddress()
DatagramPacket
-
構造緩沖區接收讀取指定長度的資料包DatagramPacket(byte[] buf, int length)
-
擷取接收的資料包的大小int getLength()
-
擷取發送方的IP位址InetAddress getAddress()
-
擷取發送方的端口号int getPort()
-
構造發送的資料包,并設定接受者的IP位址和端口DatagramPacket(byte[] buf, int length, InetAddress address, int port)
DatagramSocket
-
空構造DatagramSocket()
-
建立指定接受者端口的套接字對象DatagramSocket(int port)
-
發送資料包void send(DatagramPacket p)
-
接收資料包void receive(DatagramPacket p)
-
關閉套接字void close()
2.接收方
/* 測試時應先啟動接收方,再啟動發送方 */
//用于接收資料的緩沖區
byte[] data=new byte[1024];
//建立資料包對象
DatagramPacket dp=new DatagramPacket(data, data.length);
//建立套接字對象,設定接收方端口為3000
DatagramSocket ds=new DatagramSocket(3000);
//接收資料包
ds.receive(dp);
//擷取發送者的IP位址
String senderIP=dp.getAddress().getHostAddress();
//擷取發送者的端口号
int senderPort=dp.getPort();
//擷取資料包的大小
int length=dp.getLength();
System.out.println(senderIP+":"+senderPort+"..."+new String(data,0,length));
//關閉資源
ds.close();
3.發送方
String msg="你好";
byte[] data=msg.getBytes();
//接收者IP位址
InetAddress receiverIP=InetAddress.getByName("127.0.0.1");
//接收者端口号
int receiverPort=3000;
//建立資料包
DatagramPacket dp=new DatagramPacket(data, data.length,receiverIP,receiverPort);
//建立套接字對象
DatagramSocket ds=new DatagramSocket();
//發送資料包
ds.send(dp);
//關閉資源
ds.close();
二.TCP
TCP:面向有連接配接通信,三次握手,資料安全,效率較低,區分用戶端與伺服器端
1.常用方法
Socket
-
建立用戶端的套接字對象,并設定需要通路的伺服器的IP和端口Socket(String host, int port)
-
擷取輸出流,用于用戶端發送資料或伺服器端響應資料OutputStream getOutputStream()
-
InputStream getInputStream()
擷取輸入流,用于讀取用戶端發送的資料或伺服器端響應的資料
-
關閉套接字void close()
ServerSocket
-
建立伺服器端的套接字對象,并綁定端口号ServerSocket(int port)
-
監聽并接受用戶端的套接字Socket accept()
-
關閉套接字void close()
2.伺服器端
//建立伺服器端的套接字對象,并綁定端口号
ServerSocket server=new ServerSocket(4000);
//監聽并接受用戶端的套接字
Socket socket= server.accept();
//擷取用戶端發送資料的輸入流
InputStream in=socket.getInputStream();
byte[] data=new byte[1024];
//讀取用戶端發送的資料
int len=in.read(data);
String msg=new String(data,0,len);
System.out.println(msg);
if(msg.equals("我要登入")){
//擷取伺服器端響應給用戶端的輸出流
OutputStream out=socket.getOutputStream();
//輸出資料到用戶端
out.write("登入成功".getBytes());
}
//關閉資源
socket.close();
server.close();
3.用戶端
//建立用戶端的套接字對象,并設定需要通路的伺服器的IP和端口
Socket socket=new Socket("127.0.0.1", 4000);
//擷取發送資料到伺服器端的輸出流
OutputStream out= socket.getOutputStream();
//發送資料到伺服器端
out.write("我要登入".getBytes());
//擷取伺服器端響應傳回資料的輸入流
InputStream in=socket.getInputStream();
byte[] data=new byte[1024];
//讀取伺服器端傳回的資料
int len=in.read(data);
System.out.println(new String(data,0,len));
//關閉資源
socket.close();