'零基礎進軍Java必備!java基礎學習—網絡編程總結'

Java 電腦 通信 技術 程序員小姐 2019-08-02
"

一、網絡基礎概念

首先理清一個概念:網絡編程 != 網站編程,網絡編程現在一般稱為TCP/IP編程。

"

一、網絡基礎概念

首先理清一個概念:網絡編程 != 網站編程,網絡編程現在一般稱為TCP/IP編程。

零基礎進軍Java必備!java基礎學習—網絡編程總結

二、網絡通信協議及接口

"

一、網絡基礎概念

首先理清一個概念:網絡編程 != 網站編程,網絡編程現在一般稱為TCP/IP編程。

零基礎進軍Java必備!java基礎學習—網絡編程總結

二、網絡通信協議及接口

零基礎進軍Java必備!java基礎學習—網絡編程總結

三、通信協議分層思想

"

一、網絡基礎概念

首先理清一個概念:網絡編程 != 網站編程,網絡編程現在一般稱為TCP/IP編程。

零基礎進軍Java必備!java基礎學習—網絡編程總結

二、網絡通信協議及接口

零基礎進軍Java必備!java基礎學習—網絡編程總結

三、通信協議分層思想

零基礎進軍Java必備!java基礎學習—網絡編程總結

四、參考模型

"

一、網絡基礎概念

首先理清一個概念:網絡編程 != 網站編程,網絡編程現在一般稱為TCP/IP編程。

零基礎進軍Java必備!java基礎學習—網絡編程總結

二、網絡通信協議及接口

零基礎進軍Java必備!java基礎學習—網絡編程總結

三、通信協議分層思想

零基礎進軍Java必備!java基礎學習—網絡編程總結

四、參考模型

零基礎進軍Java必備!java基礎學習—網絡編程總結

五、IP協議

"

一、網絡基礎概念

首先理清一個概念:網絡編程 != 網站編程,網絡編程現在一般稱為TCP/IP編程。

零基礎進軍Java必備!java基礎學習—網絡編程總結

二、網絡通信協議及接口

零基礎進軍Java必備!java基礎學習—網絡編程總結

三、通信協議分層思想

零基礎進軍Java必備!java基礎學習—網絡編程總結

四、參考模型

零基礎進軍Java必備!java基礎學習—網絡編程總結

五、IP協議

零基礎進軍Java必備!java基礎學習—網絡編程總結

每個人的電腦都有一個獨一無二的IP地址,這樣互相通信時就不會傳錯信息了。

IP地址是用一個點來分成四段的,在計算機內部IP地址是用四個字節來表示的,一個字節代表一段,每一個字節代表的數最大隻能到達255。

六、TCP協議和UDP協議

"

一、網絡基礎概念

首先理清一個概念:網絡編程 != 網站編程,網絡編程現在一般稱為TCP/IP編程。

零基礎進軍Java必備!java基礎學習—網絡編程總結

二、網絡通信協議及接口

零基礎進軍Java必備!java基礎學習—網絡編程總結

三、通信協議分層思想

零基礎進軍Java必備!java基礎學習—網絡編程總結

四、參考模型

零基礎進軍Java必備!java基礎學習—網絡編程總結

五、IP協議

零基礎進軍Java必備!java基礎學習—網絡編程總結

每個人的電腦都有一個獨一無二的IP地址,這樣互相通信時就不會傳錯信息了。

IP地址是用一個點來分成四段的,在計算機內部IP地址是用四個字節來表示的,一個字節代表一段,每一個字節代表的數最大隻能到達255。

六、TCP協議和UDP協議

零基礎進軍Java必備!java基礎學習—網絡編程總結

TCP和UDP位於同一層,都是建立在IP層的基礎之上。由於兩臺電腦之間有不同的IP地址,因此兩臺電腦就可以區分開來,也就可以互相通話了。通話一般有兩種通話方式:第一種是TCP,第二種是UDP。TCP是可靠的連接,TCP就像打電話,需要先打通對方電話,等待對方有迴應後才會跟對方繼續說話,也就是一定要確認可以發信息以後才會把信息發出去。TCP上傳任何東西都是可靠的,只要兩臺機器上建立起了連接,在本機上發送的數據就一定能傳到對方的機器上,UDP就好比發電報,發出去就完事了,對方有沒有接收到它都不管,所以UDP是不可靠的。TCP傳送數據雖然可靠,但傳送得比較慢,UDP傳送數據不可靠,但是傳送得快

七、Socket編程

一般的網絡編程都稱為Socket編程,Socket的英文意思是“插座”。

"

一、網絡基礎概念

首先理清一個概念:網絡編程 != 網站編程,網絡編程現在一般稱為TCP/IP編程。

零基礎進軍Java必備!java基礎學習—網絡編程總結

二、網絡通信協議及接口

零基礎進軍Java必備!java基礎學習—網絡編程總結

三、通信協議分層思想

零基礎進軍Java必備!java基礎學習—網絡編程總結

四、參考模型

零基礎進軍Java必備!java基礎學習—網絡編程總結

五、IP協議

零基礎進軍Java必備!java基礎學習—網絡編程總結

每個人的電腦都有一個獨一無二的IP地址,這樣互相通信時就不會傳錯信息了。

IP地址是用一個點來分成四段的,在計算機內部IP地址是用四個字節來表示的,一個字節代表一段,每一個字節代表的數最大隻能到達255。

六、TCP協議和UDP協議

零基礎進軍Java必備!java基礎學習—網絡編程總結

TCP和UDP位於同一層,都是建立在IP層的基礎之上。由於兩臺電腦之間有不同的IP地址,因此兩臺電腦就可以區分開來,也就可以互相通話了。通話一般有兩種通話方式:第一種是TCP,第二種是UDP。TCP是可靠的連接,TCP就像打電話,需要先打通對方電話,等待對方有迴應後才會跟對方繼續說話,也就是一定要確認可以發信息以後才會把信息發出去。TCP上傳任何東西都是可靠的,只要兩臺機器上建立起了連接,在本機上發送的數據就一定能傳到對方的機器上,UDP就好比發電報,發出去就完事了,對方有沒有接收到它都不管,所以UDP是不可靠的。TCP傳送數據雖然可靠,但傳送得比較慢,UDP傳送數據不可靠,但是傳送得快

七、Socket編程

一般的網絡編程都稱為Socket編程,Socket的英文意思是“插座”。

零基礎進軍Java必備!java基礎學習—網絡編程總結

兩臺電腦都安裝上一個插座,然後使用一根線的兩端插到兩臺電腦的插座上,這樣兩臺電腦就建立好了連接。這個插座就是Socket。

因為互相之間都能互相通信,我說你是我的Server只是從邏輯意義上來講,我應該把東西先發到你那裡去,然後由你來處理,轉發。所以你叫Server。但從技術意義上來講,只有TCP才會分Server和Client。對於UDP來說,從嚴格意義上來講,並沒有所謂的Server和Client。TCP的Server的插座就叫ServerSocket,Client的插座就叫Socket。

兩臺計算機互相連接,那麼首先必須得知道它們的IP地址,但是隻提供IP地址是不夠的,還必須要有連接的端口號,也就是要連接到哪個應用程序上。

端口號是用來區分一臺機器上不同的應用程序的。端口號在計算機內部是佔2個字節。一臺機器上最多有65536個端口號。一個應用程序可以佔用多個端口號。端口號如果被一個應用程序佔用了,那麼其他的應用程序就無法再使用這個端口號了。記住一點,我們編寫的程序要佔用端口號的話佔用1024以上的端口號,1024以下的端口號不要去佔用,因為系統有可能會隨時徵用。端口號本身又分為TCP端口和UDP端口,TCP的8888端口和UDP的8888端口是完全不同的兩個端口。TCP端口和UDP端口都有65536個。

八、TCP Socket通信模型

"

一、網絡基礎概念

首先理清一個概念:網絡編程 != 網站編程,網絡編程現在一般稱為TCP/IP編程。

零基礎進軍Java必備!java基礎學習—網絡編程總結

二、網絡通信協議及接口

零基礎進軍Java必備!java基礎學習—網絡編程總結

三、通信協議分層思想

零基礎進軍Java必備!java基礎學習—網絡編程總結

四、參考模型

零基礎進軍Java必備!java基礎學習—網絡編程總結

五、IP協議

零基礎進軍Java必備!java基礎學習—網絡編程總結

每個人的電腦都有一個獨一無二的IP地址,這樣互相通信時就不會傳錯信息了。

IP地址是用一個點來分成四段的,在計算機內部IP地址是用四個字節來表示的,一個字節代表一段,每一個字節代表的數最大隻能到達255。

六、TCP協議和UDP協議

零基礎進軍Java必備!java基礎學習—網絡編程總結

TCP和UDP位於同一層,都是建立在IP層的基礎之上。由於兩臺電腦之間有不同的IP地址,因此兩臺電腦就可以區分開來,也就可以互相通話了。通話一般有兩種通話方式:第一種是TCP,第二種是UDP。TCP是可靠的連接,TCP就像打電話,需要先打通對方電話,等待對方有迴應後才會跟對方繼續說話,也就是一定要確認可以發信息以後才會把信息發出去。TCP上傳任何東西都是可靠的,只要兩臺機器上建立起了連接,在本機上發送的數據就一定能傳到對方的機器上,UDP就好比發電報,發出去就完事了,對方有沒有接收到它都不管,所以UDP是不可靠的。TCP傳送數據雖然可靠,但傳送得比較慢,UDP傳送數據不可靠,但是傳送得快

七、Socket編程

一般的網絡編程都稱為Socket編程,Socket的英文意思是“插座”。

零基礎進軍Java必備!java基礎學習—網絡編程總結

兩臺電腦都安裝上一個插座,然後使用一根線的兩端插到兩臺電腦的插座上,這樣兩臺電腦就建立好了連接。這個插座就是Socket。

因為互相之間都能互相通信,我說你是我的Server只是從邏輯意義上來講,我應該把東西先發到你那裡去,然後由你來處理,轉發。所以你叫Server。但從技術意義上來講,只有TCP才會分Server和Client。對於UDP來說,從嚴格意義上來講,並沒有所謂的Server和Client。TCP的Server的插座就叫ServerSocket,Client的插座就叫Socket。

兩臺計算機互相連接,那麼首先必須得知道它們的IP地址,但是隻提供IP地址是不夠的,還必須要有連接的端口號,也就是要連接到哪個應用程序上。

端口號是用來區分一臺機器上不同的應用程序的。端口號在計算機內部是佔2個字節。一臺機器上最多有65536個端口號。一個應用程序可以佔用多個端口號。端口號如果被一個應用程序佔用了,那麼其他的應用程序就無法再使用這個端口號了。記住一點,我們編寫的程序要佔用端口號的話佔用1024以上的端口號,1024以下的端口號不要去佔用,因為系統有可能會隨時徵用。端口號本身又分為TCP端口和UDP端口,TCP的8888端口和UDP的8888端口是完全不同的兩個端口。TCP端口和UDP端口都有65536個。

八、TCP Socket通信模型

零基礎進軍Java必備!java基礎學習—網絡編程總結

九、Socket使用範例

服務器端ServerSocket

 1 import java.net.*;
2 import java.io.*;
3 public class TestServerSocket{
4 public static void main(String args[]) throws Exception{
5 ServerSocket ss = new ServerSocket(6666);
6 /*創建一個ServerSocket對象時往往會給它指定一個端口號
7 指定端口號的意思是這個new出來的ServerSocket對象要使用的
8 是哪一個端口號,通過哪一個端口號來監聽客戶端的連接
9 因此指定一個端口號的意義就是為了告訴計算機ServerSocket對象
10 在哪個地方監聽客戶端的連接*/
11 /*服務器端接收客戶端連接的請求是不間斷地接收的,所以服務器端的
12 編程一般都是死循環,永不休止地運行著。*/
13 while(true){
14 Socket s = ss.accept();
15 /*在服務器端調用accept()方法接受客戶端的連接對象,accept()方法是
16 一個阻塞式方法,一直在傻傻地等待著是否有客戶端申請連接上來
17 然後服務器端的Socket插座就和客戶端的Socket插座建立了連接了*/
18 /*客戶端能否連接上服務器端,取決於服務器端是否接受客戶端的連接請求
19 如果接受了客戶端的連接請求,那麼在服務器端就安裝上一個Socket插座
20 通過這個插座與連接上的客戶端就可以建立連接,互相通信了*/
21 System.out.println("A Client Connected!");
22 /*使用InputStream流接收從客戶端發送過來的信息,使用DataInputStream數據流處理接收到的信息*/
23 DataInputStream dis = new DataInputStream(s.getInputStream());
24 /*使用readUTF(方法將接收到的信息全部讀取出來,存儲到變量str裡面
25 readUTF()方法也是一個阻塞式方法,會傻傻地等待客戶端發送信息過來,然後將接收到的信息讀取出來
26 如果客戶端不寫東西過來,它就一直在服務器端傻傻地等待著,直到客戶端寫東西過來為止
27 堵塞式的方法效率往往是不高的,比如說一個客戶端連接上來了,但是它遲遲不發送信息,
28 那麼服務器端的程序就阻塞住了,這樣另外一個客戶端就連接不上來了,因為另外一個客戶端要想連接
29 上服務器端,就必須得在服務器端調用accept()方法,可accept()方法必須得在下一次循環時才能夠被
30 調用,現在服務器端的程序運行到調用readUTF()這個方法時就阻塞住了,它要等待著已經連接上來的
31 那個客戶端發送信息過來後將信息讀取出來,如果客戶端一直不發信息到服務器端,那麼readUTF()方法
32 就一直無法讀取到信息,那麼服務器端的程序會阻塞在這裡,無法進行下次循環,這樣其他的客戶端就
33 無法連接到服務器端了*/
34 String str = dis.readUTF();
35 System.out.println(str);
36 }
37 }
38 }

客戶端Socket

 1 import java.net.*;
2 import java.io.*;
3 public class TestClientSocket{
4 public static void main(String args[]) throws Exception{
5 Socket s = new Socket("127.0.0.1",6666);
6 /*Client申請連接到Server端上*/
7 /*連接上服務器端以後,就可以向服務器端輸出信息和接收從服務器端返回的信息
8 輸出信息和接收返回信息都要使用流式的輸入輸出原理進行信息的處理*/
9 /*這裡是使用輸出流OutputStream向服務器端輸出信息*/
10 OutputStream os = s.getOutputStream();
11 DataOutputStream dos = new DataOutputStream(os);
12 Thread.sleep(30000);/*客戶端睡眠30秒後再向服務器端發送信息*/
13 dos.writeUTF("Hello Server!");
14 }
15 }
"

一、網絡基礎概念

首先理清一個概念:網絡編程 != 網站編程,網絡編程現在一般稱為TCP/IP編程。

零基礎進軍Java必備!java基礎學習—網絡編程總結

二、網絡通信協議及接口

零基礎進軍Java必備!java基礎學習—網絡編程總結

三、通信協議分層思想

零基礎進軍Java必備!java基礎學習—網絡編程總結

四、參考模型

零基礎進軍Java必備!java基礎學習—網絡編程總結

五、IP協議

零基礎進軍Java必備!java基礎學習—網絡編程總結

每個人的電腦都有一個獨一無二的IP地址,這樣互相通信時就不會傳錯信息了。

IP地址是用一個點來分成四段的,在計算機內部IP地址是用四個字節來表示的,一個字節代表一段,每一個字節代表的數最大隻能到達255。

六、TCP協議和UDP協議

零基礎進軍Java必備!java基礎學習—網絡編程總結

TCP和UDP位於同一層,都是建立在IP層的基礎之上。由於兩臺電腦之間有不同的IP地址,因此兩臺電腦就可以區分開來,也就可以互相通話了。通話一般有兩種通話方式:第一種是TCP,第二種是UDP。TCP是可靠的連接,TCP就像打電話,需要先打通對方電話,等待對方有迴應後才會跟對方繼續說話,也就是一定要確認可以發信息以後才會把信息發出去。TCP上傳任何東西都是可靠的,只要兩臺機器上建立起了連接,在本機上發送的數據就一定能傳到對方的機器上,UDP就好比發電報,發出去就完事了,對方有沒有接收到它都不管,所以UDP是不可靠的。TCP傳送數據雖然可靠,但傳送得比較慢,UDP傳送數據不可靠,但是傳送得快

七、Socket編程

一般的網絡編程都稱為Socket編程,Socket的英文意思是“插座”。

零基礎進軍Java必備!java基礎學習—網絡編程總結

兩臺電腦都安裝上一個插座,然後使用一根線的兩端插到兩臺電腦的插座上,這樣兩臺電腦就建立好了連接。這個插座就是Socket。

因為互相之間都能互相通信,我說你是我的Server只是從邏輯意義上來講,我應該把東西先發到你那裡去,然後由你來處理,轉發。所以你叫Server。但從技術意義上來講,只有TCP才會分Server和Client。對於UDP來說,從嚴格意義上來講,並沒有所謂的Server和Client。TCP的Server的插座就叫ServerSocket,Client的插座就叫Socket。

兩臺計算機互相連接,那麼首先必須得知道它們的IP地址,但是隻提供IP地址是不夠的,還必須要有連接的端口號,也就是要連接到哪個應用程序上。

端口號是用來區分一臺機器上不同的應用程序的。端口號在計算機內部是佔2個字節。一臺機器上最多有65536個端口號。一個應用程序可以佔用多個端口號。端口號如果被一個應用程序佔用了,那麼其他的應用程序就無法再使用這個端口號了。記住一點,我們編寫的程序要佔用端口號的話佔用1024以上的端口號,1024以下的端口號不要去佔用,因為系統有可能會隨時徵用。端口號本身又分為TCP端口和UDP端口,TCP的8888端口和UDP的8888端口是完全不同的兩個端口。TCP端口和UDP端口都有65536個。

八、TCP Socket通信模型

零基礎進軍Java必備!java基礎學習—網絡編程總結

九、Socket使用範例

服務器端ServerSocket

 1 import java.net.*;
2 import java.io.*;
3 public class TestServerSocket{
4 public static void main(String args[]) throws Exception{
5 ServerSocket ss = new ServerSocket(6666);
6 /*創建一個ServerSocket對象時往往會給它指定一個端口號
7 指定端口號的意思是這個new出來的ServerSocket對象要使用的
8 是哪一個端口號,通過哪一個端口號來監聽客戶端的連接
9 因此指定一個端口號的意義就是為了告訴計算機ServerSocket對象
10 在哪個地方監聽客戶端的連接*/
11 /*服務器端接收客戶端連接的請求是不間斷地接收的,所以服務器端的
12 編程一般都是死循環,永不休止地運行著。*/
13 while(true){
14 Socket s = ss.accept();
15 /*在服務器端調用accept()方法接受客戶端的連接對象,accept()方法是
16 一個阻塞式方法,一直在傻傻地等待著是否有客戶端申請連接上來
17 然後服務器端的Socket插座就和客戶端的Socket插座建立了連接了*/
18 /*客戶端能否連接上服務器端,取決於服務器端是否接受客戶端的連接請求
19 如果接受了客戶端的連接請求,那麼在服務器端就安裝上一個Socket插座
20 通過這個插座與連接上的客戶端就可以建立連接,互相通信了*/
21 System.out.println("A Client Connected!");
22 /*使用InputStream流接收從客戶端發送過來的信息,使用DataInputStream數據流處理接收到的信息*/
23 DataInputStream dis = new DataInputStream(s.getInputStream());
24 /*使用readUTF(方法將接收到的信息全部讀取出來,存儲到變量str裡面
25 readUTF()方法也是一個阻塞式方法,會傻傻地等待客戶端發送信息過來,然後將接收到的信息讀取出來
26 如果客戶端不寫東西過來,它就一直在服務器端傻傻地等待著,直到客戶端寫東西過來為止
27 堵塞式的方法效率往往是不高的,比如說一個客戶端連接上來了,但是它遲遲不發送信息,
28 那麼服務器端的程序就阻塞住了,這樣另外一個客戶端就連接不上來了,因為另外一個客戶端要想連接
29 上服務器端,就必須得在服務器端調用accept()方法,可accept()方法必須得在下一次循環時才能夠被
30 調用,現在服務器端的程序運行到調用readUTF()這個方法時就阻塞住了,它要等待著已經連接上來的
31 那個客戶端發送信息過來後將信息讀取出來,如果客戶端一直不發信息到服務器端,那麼readUTF()方法
32 就一直無法讀取到信息,那麼服務器端的程序會阻塞在這裡,無法進行下次循環,這樣其他的客戶端就
33 無法連接到服務器端了*/
34 String str = dis.readUTF();
35 System.out.println(str);
36 }
37 }
38 }

客戶端Socket

 1 import java.net.*;
2 import java.io.*;
3 public class TestClientSocket{
4 public static void main(String args[]) throws Exception{
5 Socket s = new Socket("127.0.0.1",6666);
6 /*Client申請連接到Server端上*/
7 /*連接上服務器端以後,就可以向服務器端輸出信息和接收從服務器端返回的信息
8 輸出信息和接收返回信息都要使用流式的輸入輸出原理進行信息的處理*/
9 /*這裡是使用輸出流OutputStream向服務器端輸出信息*/
10 OutputStream os = s.getOutputStream();
11 DataOutputStream dos = new DataOutputStream(os);
12 Thread.sleep(30000);/*客戶端睡眠30秒後再向服務器端發送信息*/
13 dos.writeUTF("Hello Server!");
14 }
15 }
零基礎進軍Java必備!java基礎學習—網絡編程總結

客戶端通過端口6666向服務器端請求連接,服務器端接受客戶端的連接請求以後,就在服務器端上安裝一個Socket,然後讓這個Socket與客戶端的Socket連接,這樣服務器端就可以與客戶端互相通信了,當有另外一個客戶端申請連接時,服務器端接受了以後,又會安裝另外一個Socket與這個客戶端的Socket進行連接。

寫在最後:小編為大家準備了一些適合於1-5年以上開發經驗的java程序員面試涉及到的絕大部分面試題及答案做成了文檔和學習筆記文件以及架構視頻資料免費分享給大家(包括Dubbo、Redis、Netty、zookeeper、Spring cloud、分佈式、高併發等架構技術資料),希望可以幫助到大家。

"

一、網絡基礎概念

首先理清一個概念:網絡編程 != 網站編程,網絡編程現在一般稱為TCP/IP編程。

零基礎進軍Java必備!java基礎學習—網絡編程總結

二、網絡通信協議及接口

零基礎進軍Java必備!java基礎學習—網絡編程總結

三、通信協議分層思想

零基礎進軍Java必備!java基礎學習—網絡編程總結

四、參考模型

零基礎進軍Java必備!java基礎學習—網絡編程總結

五、IP協議

零基礎進軍Java必備!java基礎學習—網絡編程總結

每個人的電腦都有一個獨一無二的IP地址,這樣互相通信時就不會傳錯信息了。

IP地址是用一個點來分成四段的,在計算機內部IP地址是用四個字節來表示的,一個字節代表一段,每一個字節代表的數最大隻能到達255。

六、TCP協議和UDP協議

零基礎進軍Java必備!java基礎學習—網絡編程總結

TCP和UDP位於同一層,都是建立在IP層的基礎之上。由於兩臺電腦之間有不同的IP地址,因此兩臺電腦就可以區分開來,也就可以互相通話了。通話一般有兩種通話方式:第一種是TCP,第二種是UDP。TCP是可靠的連接,TCP就像打電話,需要先打通對方電話,等待對方有迴應後才會跟對方繼續說話,也就是一定要確認可以發信息以後才會把信息發出去。TCP上傳任何東西都是可靠的,只要兩臺機器上建立起了連接,在本機上發送的數據就一定能傳到對方的機器上,UDP就好比發電報,發出去就完事了,對方有沒有接收到它都不管,所以UDP是不可靠的。TCP傳送數據雖然可靠,但傳送得比較慢,UDP傳送數據不可靠,但是傳送得快

七、Socket編程

一般的網絡編程都稱為Socket編程,Socket的英文意思是“插座”。

零基礎進軍Java必備!java基礎學習—網絡編程總結

兩臺電腦都安裝上一個插座,然後使用一根線的兩端插到兩臺電腦的插座上,這樣兩臺電腦就建立好了連接。這個插座就是Socket。

因為互相之間都能互相通信,我說你是我的Server只是從邏輯意義上來講,我應該把東西先發到你那裡去,然後由你來處理,轉發。所以你叫Server。但從技術意義上來講,只有TCP才會分Server和Client。對於UDP來說,從嚴格意義上來講,並沒有所謂的Server和Client。TCP的Server的插座就叫ServerSocket,Client的插座就叫Socket。

兩臺計算機互相連接,那麼首先必須得知道它們的IP地址,但是隻提供IP地址是不夠的,還必須要有連接的端口號,也就是要連接到哪個應用程序上。

端口號是用來區分一臺機器上不同的應用程序的。端口號在計算機內部是佔2個字節。一臺機器上最多有65536個端口號。一個應用程序可以佔用多個端口號。端口號如果被一個應用程序佔用了,那麼其他的應用程序就無法再使用這個端口號了。記住一點,我們編寫的程序要佔用端口號的話佔用1024以上的端口號,1024以下的端口號不要去佔用,因為系統有可能會隨時徵用。端口號本身又分為TCP端口和UDP端口,TCP的8888端口和UDP的8888端口是完全不同的兩個端口。TCP端口和UDP端口都有65536個。

八、TCP Socket通信模型

零基礎進軍Java必備!java基礎學習—網絡編程總結

九、Socket使用範例

服務器端ServerSocket

 1 import java.net.*;
2 import java.io.*;
3 public class TestServerSocket{
4 public static void main(String args[]) throws Exception{
5 ServerSocket ss = new ServerSocket(6666);
6 /*創建一個ServerSocket對象時往往會給它指定一個端口號
7 指定端口號的意思是這個new出來的ServerSocket對象要使用的
8 是哪一個端口號,通過哪一個端口號來監聽客戶端的連接
9 因此指定一個端口號的意義就是為了告訴計算機ServerSocket對象
10 在哪個地方監聽客戶端的連接*/
11 /*服務器端接收客戶端連接的請求是不間斷地接收的,所以服務器端的
12 編程一般都是死循環,永不休止地運行著。*/
13 while(true){
14 Socket s = ss.accept();
15 /*在服務器端調用accept()方法接受客戶端的連接對象,accept()方法是
16 一個阻塞式方法,一直在傻傻地等待著是否有客戶端申請連接上來
17 然後服務器端的Socket插座就和客戶端的Socket插座建立了連接了*/
18 /*客戶端能否連接上服務器端,取決於服務器端是否接受客戶端的連接請求
19 如果接受了客戶端的連接請求,那麼在服務器端就安裝上一個Socket插座
20 通過這個插座與連接上的客戶端就可以建立連接,互相通信了*/
21 System.out.println("A Client Connected!");
22 /*使用InputStream流接收從客戶端發送過來的信息,使用DataInputStream數據流處理接收到的信息*/
23 DataInputStream dis = new DataInputStream(s.getInputStream());
24 /*使用readUTF(方法將接收到的信息全部讀取出來,存儲到變量str裡面
25 readUTF()方法也是一個阻塞式方法,會傻傻地等待客戶端發送信息過來,然後將接收到的信息讀取出來
26 如果客戶端不寫東西過來,它就一直在服務器端傻傻地等待著,直到客戶端寫東西過來為止
27 堵塞式的方法效率往往是不高的,比如說一個客戶端連接上來了,但是它遲遲不發送信息,
28 那麼服務器端的程序就阻塞住了,這樣另外一個客戶端就連接不上來了,因為另外一個客戶端要想連接
29 上服務器端,就必須得在服務器端調用accept()方法,可accept()方法必須得在下一次循環時才能夠被
30 調用,現在服務器端的程序運行到調用readUTF()這個方法時就阻塞住了,它要等待著已經連接上來的
31 那個客戶端發送信息過來後將信息讀取出來,如果客戶端一直不發信息到服務器端,那麼readUTF()方法
32 就一直無法讀取到信息,那麼服務器端的程序會阻塞在這裡,無法進行下次循環,這樣其他的客戶端就
33 無法連接到服務器端了*/
34 String str = dis.readUTF();
35 System.out.println(str);
36 }
37 }
38 }

客戶端Socket

 1 import java.net.*;
2 import java.io.*;
3 public class TestClientSocket{
4 public static void main(String args[]) throws Exception{
5 Socket s = new Socket("127.0.0.1",6666);
6 /*Client申請連接到Server端上*/
7 /*連接上服務器端以後,就可以向服務器端輸出信息和接收從服務器端返回的信息
8 輸出信息和接收返回信息都要使用流式的輸入輸出原理進行信息的處理*/
9 /*這裡是使用輸出流OutputStream向服務器端輸出信息*/
10 OutputStream os = s.getOutputStream();
11 DataOutputStream dos = new DataOutputStream(os);
12 Thread.sleep(30000);/*客戶端睡眠30秒後再向服務器端發送信息*/
13 dos.writeUTF("Hello Server!");
14 }
15 }
零基礎進軍Java必備!java基礎學習—網絡編程總結

客戶端通過端口6666向服務器端請求連接,服務器端接受客戶端的連接請求以後,就在服務器端上安裝一個Socket,然後讓這個Socket與客戶端的Socket連接,這樣服務器端就可以與客戶端互相通信了,當有另外一個客戶端申請連接時,服務器端接受了以後,又會安裝另外一個Socket與這個客戶端的Socket進行連接。

寫在最後:小編為大家準備了一些適合於1-5年以上開發經驗的java程序員面試涉及到的絕大部分面試題及答案做成了文檔和學習筆記文件以及架構視頻資料免費分享給大家(包括Dubbo、Redis、Netty、zookeeper、Spring cloud、分佈式、高併發等架構技術資料),希望可以幫助到大家。

零基礎進軍Java必備!java基礎學習—網絡編程總結

"

一、網絡基礎概念

首先理清一個概念:網絡編程 != 網站編程,網絡編程現在一般稱為TCP/IP編程。

零基礎進軍Java必備!java基礎學習—網絡編程總結

二、網絡通信協議及接口

零基礎進軍Java必備!java基礎學習—網絡編程總結

三、通信協議分層思想

零基礎進軍Java必備!java基礎學習—網絡編程總結

四、參考模型

零基礎進軍Java必備!java基礎學習—網絡編程總結

五、IP協議

零基礎進軍Java必備!java基礎學習—網絡編程總結

每個人的電腦都有一個獨一無二的IP地址,這樣互相通信時就不會傳錯信息了。

IP地址是用一個點來分成四段的,在計算機內部IP地址是用四個字節來表示的,一個字節代表一段,每一個字節代表的數最大隻能到達255。

六、TCP協議和UDP協議

零基礎進軍Java必備!java基礎學習—網絡編程總結

TCP和UDP位於同一層,都是建立在IP層的基礎之上。由於兩臺電腦之間有不同的IP地址,因此兩臺電腦就可以區分開來,也就可以互相通話了。通話一般有兩種通話方式:第一種是TCP,第二種是UDP。TCP是可靠的連接,TCP就像打電話,需要先打通對方電話,等待對方有迴應後才會跟對方繼續說話,也就是一定要確認可以發信息以後才會把信息發出去。TCP上傳任何東西都是可靠的,只要兩臺機器上建立起了連接,在本機上發送的數據就一定能傳到對方的機器上,UDP就好比發電報,發出去就完事了,對方有沒有接收到它都不管,所以UDP是不可靠的。TCP傳送數據雖然可靠,但傳送得比較慢,UDP傳送數據不可靠,但是傳送得快

七、Socket編程

一般的網絡編程都稱為Socket編程,Socket的英文意思是“插座”。

零基礎進軍Java必備!java基礎學習—網絡編程總結

兩臺電腦都安裝上一個插座,然後使用一根線的兩端插到兩臺電腦的插座上,這樣兩臺電腦就建立好了連接。這個插座就是Socket。

因為互相之間都能互相通信,我說你是我的Server只是從邏輯意義上來講,我應該把東西先發到你那裡去,然後由你來處理,轉發。所以你叫Server。但從技術意義上來講,只有TCP才會分Server和Client。對於UDP來說,從嚴格意義上來講,並沒有所謂的Server和Client。TCP的Server的插座就叫ServerSocket,Client的插座就叫Socket。

兩臺計算機互相連接,那麼首先必須得知道它們的IP地址,但是隻提供IP地址是不夠的,還必須要有連接的端口號,也就是要連接到哪個應用程序上。

端口號是用來區分一臺機器上不同的應用程序的。端口號在計算機內部是佔2個字節。一臺機器上最多有65536個端口號。一個應用程序可以佔用多個端口號。端口號如果被一個應用程序佔用了,那麼其他的應用程序就無法再使用這個端口號了。記住一點,我們編寫的程序要佔用端口號的話佔用1024以上的端口號,1024以下的端口號不要去佔用,因為系統有可能會隨時徵用。端口號本身又分為TCP端口和UDP端口,TCP的8888端口和UDP的8888端口是完全不同的兩個端口。TCP端口和UDP端口都有65536個。

八、TCP Socket通信模型

零基礎進軍Java必備!java基礎學習—網絡編程總結

九、Socket使用範例

服務器端ServerSocket

 1 import java.net.*;
2 import java.io.*;
3 public class TestServerSocket{
4 public static void main(String args[]) throws Exception{
5 ServerSocket ss = new ServerSocket(6666);
6 /*創建一個ServerSocket對象時往往會給它指定一個端口號
7 指定端口號的意思是這個new出來的ServerSocket對象要使用的
8 是哪一個端口號,通過哪一個端口號來監聽客戶端的連接
9 因此指定一個端口號的意義就是為了告訴計算機ServerSocket對象
10 在哪個地方監聽客戶端的連接*/
11 /*服務器端接收客戶端連接的請求是不間斷地接收的,所以服務器端的
12 編程一般都是死循環,永不休止地運行著。*/
13 while(true){
14 Socket s = ss.accept();
15 /*在服務器端調用accept()方法接受客戶端的連接對象,accept()方法是
16 一個阻塞式方法,一直在傻傻地等待著是否有客戶端申請連接上來
17 然後服務器端的Socket插座就和客戶端的Socket插座建立了連接了*/
18 /*客戶端能否連接上服務器端,取決於服務器端是否接受客戶端的連接請求
19 如果接受了客戶端的連接請求,那麼在服務器端就安裝上一個Socket插座
20 通過這個插座與連接上的客戶端就可以建立連接,互相通信了*/
21 System.out.println("A Client Connected!");
22 /*使用InputStream流接收從客戶端發送過來的信息,使用DataInputStream數據流處理接收到的信息*/
23 DataInputStream dis = new DataInputStream(s.getInputStream());
24 /*使用readUTF(方法將接收到的信息全部讀取出來,存儲到變量str裡面
25 readUTF()方法也是一個阻塞式方法,會傻傻地等待客戶端發送信息過來,然後將接收到的信息讀取出來
26 如果客戶端不寫東西過來,它就一直在服務器端傻傻地等待著,直到客戶端寫東西過來為止
27 堵塞式的方法效率往往是不高的,比如說一個客戶端連接上來了,但是它遲遲不發送信息,
28 那麼服務器端的程序就阻塞住了,這樣另外一個客戶端就連接不上來了,因為另外一個客戶端要想連接
29 上服務器端,就必須得在服務器端調用accept()方法,可accept()方法必須得在下一次循環時才能夠被
30 調用,現在服務器端的程序運行到調用readUTF()這個方法時就阻塞住了,它要等待著已經連接上來的
31 那個客戶端發送信息過來後將信息讀取出來,如果客戶端一直不發信息到服務器端,那麼readUTF()方法
32 就一直無法讀取到信息,那麼服務器端的程序會阻塞在這裡,無法進行下次循環,這樣其他的客戶端就
33 無法連接到服務器端了*/
34 String str = dis.readUTF();
35 System.out.println(str);
36 }
37 }
38 }

客戶端Socket

 1 import java.net.*;
2 import java.io.*;
3 public class TestClientSocket{
4 public static void main(String args[]) throws Exception{
5 Socket s = new Socket("127.0.0.1",6666);
6 /*Client申請連接到Server端上*/
7 /*連接上服務器端以後,就可以向服務器端輸出信息和接收從服務器端返回的信息
8 輸出信息和接收返回信息都要使用流式的輸入輸出原理進行信息的處理*/
9 /*這裡是使用輸出流OutputStream向服務器端輸出信息*/
10 OutputStream os = s.getOutputStream();
11 DataOutputStream dos = new DataOutputStream(os);
12 Thread.sleep(30000);/*客戶端睡眠30秒後再向服務器端發送信息*/
13 dos.writeUTF("Hello Server!");
14 }
15 }
零基礎進軍Java必備!java基礎學習—網絡編程總結

客戶端通過端口6666向服務器端請求連接,服務器端接受客戶端的連接請求以後,就在服務器端上安裝一個Socket,然後讓這個Socket與客戶端的Socket連接,這樣服務器端就可以與客戶端互相通信了,當有另外一個客戶端申請連接時,服務器端接受了以後,又會安裝另外一個Socket與這個客戶端的Socket進行連接。

寫在最後:小編為大家準備了一些適合於1-5年以上開發經驗的java程序員面試涉及到的絕大部分面試題及答案做成了文檔和學習筆記文件以及架構視頻資料免費分享給大家(包括Dubbo、Redis、Netty、zookeeper、Spring cloud、分佈式、高併發等架構技術資料),希望可以幫助到大家。

零基礎進軍Java必備!java基礎學習—網絡編程總結

零基礎進軍Java必備!java基礎學習—網絡編程總結

獲取方式:請大家關注並私信小編關鍵詞:“資料”即可獲取你需要的各類資料(從入門到大牛哦)。

"

相關推薦

推薦中...