22.Java語言軟件架構(CS/BS )、網絡通信三要素、TCP通信、Socket、ServerSocket套接字

軟件架構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();
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章