Java學習day26-網路通訊
1.Socket機制
A:通訊兩端都應該有Socket物件
B:所有的通訊都是通過Socket間的IO進行操作的
2.Socket通訊原理圖解
3.UDP協議下發送接收資料
傳送:
建立UDP傳送端的Socket物件
DatagramSocket ds = new DatagramSocket();
建立資料並把資料打包
byte[] bys = "hello,udp,我來了".getBytes();
// 長度
int length = bys.length;
// IP地址物件
InetAddress address = InetAddress.getByName("192.168.12.92");
// 埠
int port = 10086;
DatagramPacket dp = new DatagramPacket(bys, length, address, port);
傳送資料
ds.send(dp);
釋放資源
ds.close()
接收:
建立UDP接收端的Socket物件
DatagramSocket ds = new DatagramSocket(10086);
建立資料包用於接收資料
byte[] bys = new byte[1024];
int length = bys.length;
DatagramPacket dp = new DatagramPacket(bys, length);
接收資料
ds.receive(dp); // 阻塞式
解析資料包
// public InetAddress getAddress()
InetAddress address = dp.getAddress();
String ip = address.getHostAddress();
// public byte[] getData():獲取資料緩衝區
// public int getLength():獲取資料的實際長度
byte[] bys2 = dp.getData();
int len = dp.getLength();
String s = new String(bys2, 0, len);
System.out.println(ip + "傳遞的資料是:" + s);
釋放資源
ds.close();
4.TCP協議下發送接收資料
傳送:
建立TCP客戶端的Socket物件
Socket s = new Socket("192.168.12.92", 8888);
獲取輸出流,寫資料
OutputStream os = s.getOutputStream();
os.write("hello,tcp,我來了".getBytes());
釋放資源
s.close()
接收:
建立TCP伺服器端的Socket物件
ServerSocket ss = new ServerSocket(8888);
監聽客戶端連線
Socket s = ss.accept();
獲取輸入流,讀取資料InputStream is = s.getInputStream();
byte[] bys = new byte[1024];
int len = is.read(bys); // 阻塞式方法
String str = new String(bys, 0, len);
String ip = s.getInetAddress().getHostAddress();
System.out.println(ip + "---" + str);
釋放資源
s.close()