軟件架構CS/BS
1.桌面應用程序(C-Client/S-Server):
在本機安裝,並可以獨立啓動的程序;
1).單機版:運行時不需要網絡。例如:計算器、Word、掃雷......
2).網絡版:運行時需要聯網。例如:QQ、鬥地主、網遊......
2.WEB應用程序(B-Browser/S-Server):
程序只需要發佈到互聯網上的一臺服務器上即可,客戶端只需要“瀏覽器”,就可以通過網址訪問我們的服務器。例如:京東、淘寶、百度.....
網絡通信三要素
1.IP地址:它是計算機在互聯網上的唯一地址;
十進制表示:最小IP : 000.000.000.000
最大IP : 255.255.255.255
二進制表示:最小IP : 00000000.00000000.00000000.00000000
最大IP : 11111111.11111111.11111111.11111111
其中:
1).192.168.xxx.xxx : 不在公網上使用,做內網IP。
2).10.xxx.xxx.xxx : 不在公網上使用。
3).127.0.0.1 : (localhost)不在公網上使用。它是本機IP。
2.端口: 相當於“收信人”
物理端口:網卡口;
邏輯端口:由操作系統維護,就是一組數字,範圍:0--65535
任何程序在啓動時都可以自行申請端口,如果這個端口沒被佔用,操作系統就可以分配給你的程序使用。
1).一個程序啓動後可以同時佔用多個端口;
2).一個端口在某個時間點上不能被多個程序同時佔用;
3.協議:雙方都能看得懂的語言;
http、ftp、TCP協議、UDP協議...
UDP協議:
1).將數據打包發送;
2).數據包的大小有限制(64K)
3).發送時,可以沒有接收端;
例如:共屏軟件、視頻會議系統
TCP協議:
1).數據不需要打包發送;
2).數據大小沒有顯示;
3).發送時,必須要有接收端;
例如:飛秋。即時聊天程序...
TCP通信
通信原理:
1. 服務端程序,需要事先啓動,等待客戶端的連接。
2. 客戶端主動連接服務器端,連接成功才能通信。服務端不可以主動連接客戶端。
在Java中,提供了兩個類用於實現TCP通信程序:
1. 客戶端: java.net.Socket 類表示。創建 Socket 對象,向服務端發出連接請求,服務端響應請求,兩者建立連接開始
通信。
2. 服務端: java.net.ServerSocket 類表示。創建 ServerSocket 對象,相當於開啓一個服務,並等待客戶端的連接。
Socket套接字、
構造方法:
public Socket(String host, int port) :創建套接字對象並將其連接到指定主機上的指定端口號。如果指定的host是null ,
則相當於指定地址爲回送地址。
回送地址(127.x.x.x) 是本機回送地址(Loopback Address),主要用於網絡軟件測試以及本地機進程間通信,無論什麼程序,一旦使用回送地址發送數據,立即返回,不進行任何網絡傳輸。
成員方法
public InputStream getInputStream() : 返回此套接字的輸入流。
如果此Scoket具有相關聯的通道,則生成的InputStream 的所有操作也關聯該通道。
關閉生成的InputStream也將關閉相關的Socket。
public OutputStream getOutputStream() : 返回此套接字的輸出流。
如果此Scoket具有相關聯的通道,則生成的OutputStream 的所有操作也關聯該通道。關閉生成的OutputStream也將關閉
相關的Socket。
public void close() :關閉此套接字。一旦一個socket被關閉,它不可再使用。關閉此socket也將關閉相關的
InputStream和OutputStream 。
public void shutdownOutput() : 禁用此套接字的輸出流。任何先前寫出的數據將被髮送,隨後終止輸出流。
ServerSocket
構造方法
public ServerSocket(int port) :使用該構造方法在創建ServerSocket對象時,就可以將其綁定到一個指定的端口號上,
參數port就是端口號。
成員方法
public Socket accept() :偵聽並接受連接,返回一個新的Socket對象,用於和客戶端實現通信。該方法會一直阻塞直到
建立連接。
通信實現
TCP發送端通信實現:
public static void main(String[] args) throws IOException {
Socket socket = new Socket("127.0.0.1",9999);
OutputStream out = socket.getOutputStream();
out.write("我發送了一個信息。".getBytes());
System.out.println("客戶端發送了一個信息");
socket.close();
}
TCP接收端通信實現:
public static void main(String[] args) throws IOException {
ServerSocket serverSocket = new ServerSocket(9999);
System.out.println("服務器等待連接.....");
Socket socket = serverSocket.accept();
System.out.println("客戶端連接成功.....");
InputStream in = socket.getInputStream();
byte[] array = new byte[1024];
int len = in.read(array);
System.out.println("接收到的信息:" + new String(array,0,len));
in.close();
socket.close();
}