JAVA:网络编程总结
生活随笔
收集整理的這篇文章主要介紹了
JAVA:网络编程总结
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
目錄
01_網絡編程(網絡編程概述)(了解)
02_網絡編程(網絡編程三要素之IP概述)(掌握)
03_網絡編程(網絡編程三要素之端口號概述)(掌握)
04_網絡編程(網絡編程三要素協議)(掌握)
05_網絡編程(Socket通信原理圖解)(了解)
06_網絡編程(UDP傳輸)(了解)07_網絡編程(UDP傳輸優化)
08_網絡編程(UDP傳輸多線程)
09_網絡編程(TCP協議)(掌握)
10_網絡編程(TCP協議代碼優化)
11_網絡編程(服務端是多線程的)(掌握)
?
?
01_網絡編程(網絡編程概述)(了解)
* A:計算機網絡 // * 是指將地理位置不同的具有獨立功能的多臺計算機及其外部設備,通過通信線路連接起來, // 在網絡操作系統,網絡管理軟件及網絡通信協議的管理和協調下,實現資源共享和信息傳遞的計算機系統。 // * B:網絡編程 // * 就是用來實現網絡互連的不同計算機上運行的程序間可以進行數據交換。?
02_網絡編程(網絡編程三要素之IP概述)(掌握)
* 每個設備在網絡中的唯一標識 // * 每臺網絡終端在網絡中都有一個獨立的地址,我們在網絡中傳輸數據就是使用這個地址。 // * ipconfig:查看本機IP192.168.12.42 // * ping:測試連接192.168.40.62 // * 本地回路地址:127.0.0.1 255.255.255.255是廣播地址 // * IPv4:4個字節組成,4個0-255。大概42億,30億都在北美,亞洲4億。2011年初已經用盡。 // * IPv6:8組,每組4個16進制數。 // * 1a2b:0000:aaaa:0000:0000:0000:aabb:1f2f // * 1a2b::aaaa:0000:0000:0000:aabb:1f2f // * 1a2b:0000:aaaa::aabb:1f2f // * 1a2b:0000:aaaa::0000:aabb:1f2f // * 1a2b:0000:aaaa:0000::aabb:1f2f //?
03_網絡編程(網絡編程三要素之端口號概述)(掌握)
* 每個程序在設備上的唯一標識 // * 每個網絡程序都需要綁定一個端口號,傳輸數據的時候除了確定發到哪臺機器上,還要明確發到哪個程序。 // * 端口號范圍從0-65535 // * 編寫網絡應用就需要綁定一個端口號,盡量使用1024以上的,1024以下的基本上都被系統程序占用了。 // * 常用端口 // * mysql: 3306 // * oracle: 1521 // * web: 80 // * tomcat: 8080 // * QQ: 4000 // * feiQ: 2425?
04_網絡編程(網絡編程三要素協議)(掌握)
* 為計算機網絡中進行數據交換而建立的規則、標準或約定的集合。 // * UDP // * 面向無連接,數據不安全,速度快。不區分客戶端與服務端。 // * TCP // * 面向連接(三次握手),數據安全,速度略低。分為客戶端和服務端。 // * 三次握手: 客戶端先向服務端發起請求, 服務端響應請求, 傳輸數據 //?
05_網絡編程(Socket通信原理圖解)(了解)
* A:Socket套接字概述: // * 網絡上具有唯一標識的IP地址和端口號組合在一起才能構成唯一能識別的標識符套接字。 // * 通信的兩端都有Socket。 // * 網絡通信其實就是Socket間的通信。 // * 數據在兩個Socket間通過IO流傳輸。 // * Socket在應用程序中創建,通過一種綁定機制與驅動程序建立關系,告訴自己所對應的IP和port。下面是Socket傳輸代碼,先啟動發送端 public class testSend1 {public static void main(String []args) throws Exception {String s="弄啥嘞";DatagramSocket socket=new DatagramSocket(); //創建Socket,相當于創建碼頭//創建Packet,相當于創建集裝箱DatagramPacket packet=new DatagramPacket(s.getBytes(),s.getBytes().length, InetAddress.getByName("127.0.0.1"),6666);socket.send(packet); //發貨,將數據形成socket.close();} } public class testReceive1 {public static void main(String []args) throws Exception {DatagramSocket socket=new DatagramSocket(6666);DatagramPacket packet=new DatagramPacket(new byte[1024],1024);socket.receive(packet); //接收數據byte []arr=packet.getData(); //獲取數據int length=packet.getLength(); //獲取有效的字節個數System.out.println(new String(arr,0,length));socket.close();} } 06_網絡編程(UDP傳輸)(了解)07_網絡編程(UDP傳輸優化) public class testSend2 {public static void main(String []args) throws Exception {Scanner in=new Scanner(System.in);DatagramSocket socket = new DatagramSocket(); //創建Socket,相當于創建碼頭//創建Packet,相當于創建集裝箱while (true) {System.out.println("請輸入: quit結束");String s=in.nextLine();if (s.equals("quit")){break;}DatagramPacket packet = new DatagramPacket(s.getBytes(), s.getBytes().length, InetAddress.getByName("127.0.0.1"), 6666);socket.send(packet);//發貨,將數據形成}socket.close();} } public class testReceive2 {public static void main(String []args) throws Exception {DatagramSocket socket=new DatagramSocket(6666);while (true) {DatagramPacket packet = new DatagramPacket(new byte[1024], 1024);socket.receive(packet); //接收數據byte[] arr = packet.getData(); //獲取數據int length = packet.getLength(); //獲取有效的字節個數String ip=packet.getAddress().getHostAddress();int port=packet.getPort();System.out.println("IP:"+ip+"Port:"+port+new String(arr, 0, length));}} } 08_網絡編程(UDP傳輸多線程) public class testSend3 {public static void main(String []args){new ReceiveTest().start();new SendTest().start();} } class ReceiveTest extends Thread{@Overridepublic void run() {try {DatagramSocket socket=new DatagramSocket(6666);while (true) {DatagramPacket packet = new DatagramPacket(new byte[1024], 1024);socket.receive(packet); //接收數據byte[] arr = packet.getData(); //獲取數據int length = packet.getLength(); //獲取有效的字節個數String ip=packet.getAddress().getHostAddress();int port=packet.getPort();System.out.println("IP:"+ip+"Port:"+port+new String(arr, 0, length));}} catch (IOException e) {e.printStackTrace();}} } class SendTest extends Thread{@Overridepublic void run() {try {Scanner in=new Scanner(System.in);DatagramSocket socket = new DatagramSocket(); //創建Socket,相當于創建碼頭//創建Packet,相當于創建集裝箱while (true) {System.out.println("請輸入: quit結束");String s=in.nextLine();if (s.equals("quit")){break;}DatagramPacket packet = new DatagramPacket(s.getBytes(), s.getBytes().length, InetAddress.getByName("127.0.0.1"), 6666);socket.send(packet);//發貨,將數據形成}socket.close();} catch (IOException e) {e.printStackTrace();}} } 09_網絡編程(TCP協議)(掌握)下面是TCP傳輸,先啟動服務器端,后啟動客戶端
* 2.服務端 * * * 創建ServerSocket(需要指定端口號) * * * 調用ServerSocket的accept()方法接收一個客戶端請求,得到一個Socket * * * 調用Socket的getInputStream()和getOutputStream()方法獲取和客戶端相連的IO流 * * * 輸入流可以讀取客戶端輸出流寫出的數據 * * * 輸出流可以寫出數據到客戶端的輸入流 public class testServer1 {public static void main(String []args) throws IOException {ServerSocket serverSocket=new ServerSocket(6666);Socket socket=serverSocket.accept(); //接受客戶端的請求InputStream is=socket.getInputStream(); //接受客戶端輸入流OutputStream os=socket.getOutputStream(); //獲取客戶端輸出流os.write("百度一下,你就知道".getBytes()); //服務器向客戶端寫出數據byte []arr=new byte[1024];int b=is.read(arr); //讀取客戶端的數據String s=new String(arr,0,b);System.out.println(s);socket.close();} } * * 1.客戶端 * * 創建Socket連接服務端(指定ip地址,端口號)通過ip地址找對應的服務器 * * 調用Socket的getInputStream()和getOutputStream()方法獲取和服務端相連的IO流 * * 輸入流可以讀取服務端輸出流寫出的數據 * * 輸出流可以寫出數據到服務端的輸入流 public class testClient1 {public static void main(String []args) throws IOException {Socket socket= new Socket("192.168.0.7",6666);InputStream is=socket.getInputStream(); //獲取客戶端輸入流OutputStream os=socket.getOutputStream(); //獲取客戶端輸出流byte []arr=new byte[1024];int b=is.read(arr);String s=new String(arr,0,b);System.out.println(s);os.write("勇敢去追".getBytes()); //客戶端向服務器端寫數據socket.close();} }?
?
?
?
10_網絡編程(TCP協議代碼優化)11_網絡編程(服務端是多線程的)(掌握) public class testServer2 {public static void main(String []args) throws IOException {ServerSocket serverSocket=new ServerSocket(6666);while (true) {Socket socket = serverSocket.accept(); //接受客戶端的請求new Thread(){ //每接受一個請求就開啟一次線程@Overridepublic void run() {try {BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream())); //將字節流包裝成字符流PrintStream ps = new PrintStream(socket.getOutputStream()); //PrintStream有寫出換行的方法ps.println("你好,客戶端");System.out.println(br.readLine());ps.println("這是服務器端");System.out.println(br.readLine());socket.close();} catch (IOException e) {e.printStackTrace();}}}.start();}} } public class testClient2 {public static void main(String []args) throws IOException {Socket socket= new Socket("192.168.0.7",6666);BufferedReader br=new BufferedReader(new InputStreamReader(socket.getInputStream())); //將字節流包裝成字符流PrintStream ps=new PrintStream(socket.getOutputStream()); //PrintStream有寫出換行的方法System.out.println(br.readLine());ps.println("你好,我是客戶端"); //向服務器端寫出System.out.println(br.readLine());ps.println("這是客戶端");socket.close();} }?
總結
以上是生活随笔為你收集整理的JAVA:网络编程总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何修改服务器Tomcat的首页为项目
- 下一篇: python enumerate用法总结