中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

12.4-全棧Java筆記:Java網絡編程(二)

發布時間:2020-06-29 00:00:32 來源:網絡 閱讀:264 作者:全棧Java 欄目:建站服務器
 基于TCP協議的Socket編程和通信

在網絡通訊中,第一次主動發起通訊的程序被稱作客戶端(Client)程序,簡稱客戶端,而在第一次通訊中等待連接的程序被稱作服務器(Server)程序,簡稱服務器。一旦通訊建立,則客戶端和服務器端完全一樣,沒有本質的區別。 

“請求-響應”模式

 Socket類:發送TCP消息

  ServerSocket類:創建服務器

套接字是一種進程間的數據交換機制。這些進程既可以在同一機器上,也可以在通過網絡連接的不同機器上。換句話說,套接字起到通信端點的作用。單個套接字是一個端點,而一對套接字則構成一個雙向通信信道,使非關聯進程可以在本地或通過網絡進行數據交換。一旦建立套接字連接,數據即可在相同或不同的系統中雙向或單向發送,直到其中一個端點關閉連接。套接字與主機地址和端口地址相關聯。


主機地址就是客戶端或服務器程序所在的主機的IP地址。端口地址是指客戶端或服務器程序使用的主機的通信端口。在客戶端和服務器中,分別創建獨立的Socket,并通過Socket的屬性,將兩個Socket進行連接,這樣,客戶端和服務器通過套接字所建立連接使用輸入輸出流進行通信。


TCP/IP套接字是最可靠的雙向流協議,使用TCP/IP可以發送任意數量的數據。實際上,套接字只是計算機上已編號的端口。如果發送方和接收方計算機確定好端口,他們就可以通信了。

TCP/IP通信連接的簡單過程:

位于A計算機上的TCP/IP軟件向B計算機發送包含端口號的消息,B計算機的TCP/IP軟件接收該消息,并進行檢查,查看是否有他知道的程序正在該端口上接收消息。如果有,他就將該消息交給這個程序。

要使程序有效地運行,就必須有一個客戶端和一個服務器。

通過Socket的編程順序:

1.創建服務器ServerSocket,在創建時,定義ServerSocket的監聽端口(在這個端口接收客戶端發來的消息!)

2.ServerSocket調用accept()方法,使之處于阻塞狀態

3.創建客戶機Socket,并設置服務器的IP及端口

4.客戶機發出連接請求,建立連接。

5.分別取得服務器和客戶端Socket的InputStream和OutputStream

6.利用Socket和ServerSocket進行數據傳輸。 

【示例1】單向通信服務器端代碼

import java.io.BufferedWriter;

import java.io.IOException;

import java.io.OutputStreamWriter;

import java.net.ServerSocket;

import java.net.Socket;

 

/**

 * 最簡單的服務器端代碼

 * @author Administrator

 *

 */

public class BasicSocketServer {

   

    public static void main(String[] args) {

       try {

           //建立服務器端套接字

           ServerSocket serverSocket = new   ServerSocket(8888);  //TCP端口一共多少個??

           //監聽,等待客戶端請求,并愿意接收連接。

           System.out.println("服務端建立監聽");

           Socket socket = serverSocket.accept();

 

           //通過流向客戶端發送數據

//         ObjectOutputStream oos = new   ObjectOutputStream(socket.getOutputStream());

//         oos.writeObject("aaaaa");

//         oos.close();

          

           BufferedWriter bw   = new BufferedWriter(new   OutputStreamWriter(socket.getOutputStream()));

           bw.write("hhhh");

           bw.close();

          

           socket.close();

       } catch (IOException e) {

           // TODO Auto-generated catch block

           e.printStackTrace();

       }

      

    }


【示例2】單向通信Socket客戶端代碼

import java.io.BufferedReader;

import java.io.InputStreamReader;

import java.net.InetAddress;

import java.net.Socket;

 

/**

 * 最簡單的Socket客戶端

 * @author Administrator

 *

 */

public class BasicSocketClient {

    public static void main(String[] args) {

       try {

           //指定的是所要連接的服務器的IP和端口。而不是自己機器的端口。發送端口是隨機的。

           Socket socket = new Socket(InetAddress.getLocalHost(),8888);

//         ObjectInputStream ois = new   ObjectInputStream(socket.getInputStream());

//         String string = (String) ois.readObject();

//         System.out.println(string);

          

           BufferedReader br   = new BufferedReader(new   InputStreamReader(socket.getInputStream()));

           System.out.println(br.readLine());

           br.close();

          

           socket.close();

          

       } catch (Exception e) {

           e.printStackTrace();

       }

    }

}

本節我們掌握了Socket的單項通訊,那么如何實現Socket的雙向交流?下節我們重點講解下~





「全棧Java筆記」是一部能幫大家從零到一成長為全棧Java工程師系列筆記。筆者江湖人稱 Mr. G,10年Java研發經驗,曾在神州數碼、航天院某所研發中心從事軟件設計及研發工作,從小白逐漸做到工程師、高級工程師、架構師。精通Java平臺軟件開發,精通JAVAEE,熟悉各種流行開發框架。


 筆記包含從淺入深的六大部分:

 A-Java入門階段

 B-數據庫從入門到精通

 C-手刃移動前端和Web前端

 D-J2EE從了解到實戰

 E-Java高級框架精解

 F-Linux和Hadoop 




向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

桂阳县| 革吉县| 大悟县| 民勤县| 科技| 紫云| 稻城县| 绩溪县| 西乌珠穆沁旗| 辛集市| 思南县| 龙泉市| 海晏县| 永城市| 兴隆县| 广东省| 崇礼县| 张家港市| 瓮安县| 顺平县| 闻喜县| 平昌县| 莎车县| 德化县| 政和县| 修水县| 菏泽市| 绩溪县| 华安县| 巴彦淖尔市| 景德镇市| 吴江市| 锡林郭勒盟| 桦南县| 定襄县| 靖边县| 合山市| 青田县| 黔东| 中山市| 兴城市|