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