网络编程入门
網(wǎng)絡(luò)編程
1.1概述
網(wǎng)絡(luò)編程的目的:
實現(xiàn)信息交互
達(dá)到目的需要什么條件?
如何準(zhǔn)確定位一臺主機(jī):IP
如何定位計算機(jī)上資源:端口
如何傳輸數(shù)據(jù):
java web: B/S架構(gòu)
應(yīng)用:C/S架構(gòu)
1.2網(wǎng)絡(luò)通訊的要素
1.通信雙方的地址:
- IP
- 端口號
2.網(wǎng)絡(luò)通信協(xié)議
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-xyhxaGwg-1587999171269)(C:%5CUsers%5CAdministrator%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5Cimage-20200413205720049.png)]
1.3 IP
ip地址:
-
唯一定位一臺網(wǎng)絡(luò)上的計算機(jī)
-
分類
- IPV4 :4個字節(jié)組成, 0~255, 約42億個(亞洲只有4億,不公平)
- IPV6 :128位 , 8個無符號整數(shù)fe80::c0c0:ba57:fe79:a2a913
- 公網(wǎng):用于互聯(lián)網(wǎng)
- 私網(wǎng):用于局域網(wǎng)
- 192.168.xxx.xxx屬于局域網(wǎng)
- 域名:用于記憶IP(越短越貴,超貴)
- package com.mrh.net;import java.net.InetAddress; import java.net.UnknownHostException;/*** TestInetAddress* 測試IP* 2020/4/13 21:18**/ public class TestInetAddress {public static void main(String[] args) {try{//根據(jù)域名或IP查詢地址InetAddress inetAddress1 = InetAddress.getByName("www.baidu.com");System.out.println(inetAddress1);//www.baidu.com/183.232.231.174System.out.println(inetAddress1.getHostAddress());//183.232.231.174System.out.println(inetAddress1.getHostName());//www.baidu.com} catch (UnknownHostException e) {e.printStackTrace();}} }
1.4 端口
端口標(biāo)識計算機(jī)上得一個程序的進(jìn)程
-
不同的進(jìn)程有不同的端口號,同來區(qū)分軟件
-
0~65535
-
端口分類
- 公用端口0~1023
- HTTP : 80
- HTTPS : 443
- FTP : 21
- Telent : 23
- 程序注冊端口:1024~49151,分配用戶或程序
- tomcat : 8080
- Mysql : 3306
- Oracle : 1521
- 動態(tài)/私有: 49152~65535
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-M4t714x5-1587999171271)(C:%5CUsers%5CAdministrator%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5Cimage-20200413214805088.png)]
- 公用端口0~1023
1.5 通信協(xié)議
協(xié)議:約定的規(guī)則
TCP/IP協(xié)議簇
- TCP : 用戶傳輸協(xié)議
- UDP:數(shù)據(jù)報傳輸協(xié)議
- IP:網(wǎng)絡(luò)互連協(xié)議
- [外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-9GRj7YLY-1587999171272)(C:%5CUsers%5CAdministrator%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5Cimage-20200413215244643.png)]
TCP UDP對比
TCP:打電話
- 連接,穩(wěn)定
- 傳輸完成,釋放連接,效率低
- 三次握手,四次揮手
- [外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-8flK62Xv-1587999171273)(C:%5CUsers%5CAdministrator%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5Cimage-20200413220117551.png)]
- [外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-6MH0oUDi-1587999171275)(C:%5CUsers%5CAdministrator%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5Cimage-20200413220139037.png)]
- 客戶端,服務(wù)端
UDP:發(fā)短信
- 不鏈接,不穩(wěn)定
- 客戶端,服務(wù)端沒有明確界限
- 不管有沒有準(zhǔn)備都可以發(fā)給你
- 不安全(飽和攻擊)
1.6 TCP
TCP實現(xiàn)聊天
package com.mrh.net;import java.io.IOException; import java.io.OutputStream; import java.net.InetAddress; import java.net.Socket;/*** TestSocketAddress* 測試客戶端* 2020/4/13 21:38**/ public class TestClientDemo1 {public static void main(String[] args) throws IOException {//1.要知道服務(wù)器地址InetAddress inetAddress = InetAddress.getByName("localhost");int port = 9999;//2.創(chuàng)建一個socket連接Socket socket = new Socket(inetAddress, port);//3.發(fā)送消息 IO流OutputStream os = socket.getOutputStream();os.write("你好,我是帥比".getBytes());//關(guān)閉流if(os != null) {os.close();}if(socket != null) {socket.close();}} }package com.mrh.net;import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.net.ServerSocket; import java.net.Socket;/*** TestServerDemo1* 2020/4/13 22:05* 測試服務(wù)端**/ public class TestServerDemo1 {public static void main(String[] args) throws IOException {//1.要有一個地址ServerSocket serverSocket = new ServerSocket(9999);//等待客戶端Socket socket = serverSocket.accept();//讀取客戶端信息InputStream is = socket.getInputStream();//管道流ByteArrayOutputStream baos = new ByteArrayOutputStream();byte[] buffer = new byte[1024];int len;while ((len = is.read(buffer)) != -1){baos.write(buffer ,0, len);}System.out.println(baos.toString());//關(guān)閉流if(baos != null) {baos.close();}if(is != null) {is.close();}if(socket != null) {socket.close();}if(serverSocket != null) {serverSocket.close();}} }文件上傳
Tomcat
服務(wù)端
- 自定義
- Tomcat
客戶端
- 自定義
- 瀏覽器
1.7 UDP
UDP實現(xiàn)聊天
package com.mrh.net;import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.SocketException;/*** TalkReceive* 接收線程* 2020/4/16 21:48**/ public class TalkReceive implements Runnable{DatagramSocket socket = null;private int myPort;private String msgFrom;public TalkReceive(int myPort, String msgFrom) throws SocketException {this.myPort = myPort;this.msgFrom = msgFrom;socket = new DatagramSocket(myPort);}@Overridepublic void run() {while (true){try {byte[] container = new byte[1024];DatagramPacket packet = new DatagramPacket(container,0,container.length);socket.receive(packet);byte[] data = packet.getData();String receiveData = new String(data,0,data.length);System.out.println(msgFrom +": "+ receiveData);if("bye".equals(receiveData)){break;}} catch (IOException e) {e.printStackTrace();}}socket.close();} } package com.mrh.net;import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetSocketAddress; import java.net.SocketException;/*** TalkSend* 發(fā)送線程* 2020/4/16 21:26**/ public class TalkSend implements Runnable{DatagramSocket socket = null;BufferedReader reader = null;private int myPort;private int toPort;private String toIp;public TalkSend(int myPort, int toPort, String toIp) throws SocketException {this.myPort = myPort;this.toPort = toPort;this.toIp = toIp;socket = new DatagramSocket(myPort);reader = new BufferedReader(new InputStreamReader(System.in));}@Overridepublic void run() {while (true){try {String data = reader.readLine();byte[] datas = data.getBytes();DatagramPacket packet = new DatagramPacket(datas, 0, datas.length, new InetSocketAddress(this.toIp,this.toPort));socket.send(packet);if("bye".equals(data)){break;}} catch (IOException e) {e.printStackTrace();}}socket.close();} }1.8 URL
https://www.baidu.com/
統(tǒng)一資源定位器:定位互聯(lián)網(wǎng)上的某一資源
DNS域名解析 : 域名–>ip
1.協(xié)議://ip:端口/項目/資源下載網(wǎng)絡(luò)資源
package com.mrh.net;import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.URL;/*** URLDemo01* 下載網(wǎng)絡(luò)資源* 2020/4/16 22:15**/ public class URLDemo01 {public static void main(String[] args) throws IOException {//1.下載地址URL url = new URL("https://m10.music.126.net/20200416230043/5e6b78442733cd0c96f06481229c7948/yyaac/0052/005b/020f/788cff545371798931095e7e20a8d781.m4a");//2.連接網(wǎng)絡(luò)資源HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();InputStream inputStream = urlConnection.getInputStream();FileOutputStream fos = new FileOutputStream("1.m4a");//輸出數(shù)據(jù)byte[] buffer = new byte[1024];int len;while ((len = inputStream.read(buffer))!= -1){fos.write(buffer,0,buffer.length);}//關(guān)閉流fos.close();inputStream.close();urlConnection.disconnect(); // 斷開連接/*System.out.println(url.getFile());System.out.println(url.getHost());System.out.println(url.getPath());System.out.println(url.getFile());*/} }總結(jié)
- 上一篇: 失物招领小程序_@全体川农er:川农史上
- 下一篇: Rabbitmq集群高可用测试