1. 程式人生 > >Java通訊知識點彙集

Java通訊知識點彙集

網路通訊是怎麼煉成的?Socket程式設計

兩臺計算機通過網路進行通訊的必備條件是什麼:IP地址,埠號,協議

Tcp/ip協議是最廣泛的網路協議

Transfer control protocol 傳輸控制協議    Internet protocol網際網路協議

網路分為五層:最底層的是物理層,使用者最直觀接觸的,網線,網絡卡

資料鏈路層,網路層,傳輸層指的就是tcp/ip協議,最上方的就是應用層指的也是使用者能夠接觸到的比如是http超文字傳輸協議,ftp檔案傳輸協議,smtptalet

每個機器都必須有一個身份的標識,那就是IP地址

埠號就是標識不同的應用程式,0~65535,其中0~1023

被保留

IP地址和埠號組成了所謂的Socket,類似於電話的分機號和電話號碼,這樣才能組成一個通訊鏈路的終結點,是TCPUDP的基礎

http80     ftp:21   telnet:23

Java提供的網路功能的四大類:InetAddress用於標識網路上的硬體資源,URL統一資源定位符,通過URL可以直接讀取或者寫入網路上的資料,Socket使用tcp協議實現通訊socket相關的類,Datagram使用UDP協議,將資料儲存在資料包中,通過網路進行通訊。

URLunit resourcelocator)是由協議名稱和資源名稱組成,中間是用冒號隔開,在Java.net中,提供了URL

類來表示URL

如何使用URL讀取網頁內容?

通過URL物件的openStream()方法可以指定資源的輸入流,通過輸入流可以讀取,訪問網路上的資源

Socket通訊模型:“建立連線”伺服器建立服務端去傾聽socket,客戶端建立連線socket並向伺服器端傳送請求,等待並且接收連線請求,接收請求後建立連線socket。“開始通訊”                   inputstreamoutputstream,“結束通訊”關閉socket及其相關資源

Socket通訊步驟:step1:建立伺服器serversocket和客戶端socket step2:開啟連線到socket的輸入流和輸出流

step3:按照協議對socket進行讀寫操作 step4:關閉輸入輸出流,並且關閉socket      備註:先要啟動伺服器,然後才可以啟動客戶端

//建立一個serversocket的物件,繫結埠號

try {

ServerSocket serversocket=new ServerSocket(8888);

//通過accept方法等待客戶端的連線,一旦連線上就會接收到一個socket

System.out.println("等待伺服器連線");

Socketsocket=serversocket.accept();

//利用輸入輸出流通訊,利用輸入流來讀取客戶端的資訊

InputStreamis=socket.getInputStream();

//為了提高效能,一般是將位元組流轉化為字元流

InputStreamReader isr=new InputStreamReader(is);

//為字元流新增快取

BufferedReader br=new BufferedReader(isr);

String string=br.readLine();//讀取資料

while(string!=null){

System.out.println("客戶端的傳送過來的資料資訊:"+string);

string=br.readLine();//讀取資料

}

//關閉資源

socket.shutdownInput();

br.close();

isr.close();

is.close();

//建立客戶端Socket,指定伺服器和埠

try {

Socket socket=new Socket("localhost",8888);

//開始向伺服器傳送登入資訊,獲取一個輸出流

OutputStreamos=socket.getOutputStream();//獲取一個位元組輸出流

PrintWriter pw=new PrintWriter(os);//將位元組輸出流封裝成列印輸出流

pw.write("使用者名稱:admin;密碼:123");

pw.flush();//重新整理快取

socket.shutdownOutput();

pw.close();

os.close();

socket.close();

} catch (UnknownHostException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

伺服器如何去響應客戶端的請求?獲取輸出流,響應客戶端的請求

//獲取輸出流,響應客戶端的請求,其實是類似於之前客戶端的發出請求,先要建立一個輸出流

OutputStreamos=socket.getOutputStream();

PrintWriter pw=new      PrintWriter(os);

pw.write("歡迎您的來訪!");

pw.flush();

socket.shutdownOutput();

pw.close();

os.close();

客戶端如何去獲取到伺服器的響應的內容?

//建立輸入流來獲取到伺服器的請求

InputStreamis=socket.getInputStream();

InputStreamReader isr=new InputStreamReader(is);//轉化為字元流

//為字元流新增快取

BufferedReader br=new BufferedReader(isr);

String string=null;

while((string=br.readLine())!=null){

System.out.println("客戶端獲取到伺服器響應的資料資訊:"+string);

}

//關閉資源

socket.shutdownInput();

br.close();

isr.close();

is.close();

在實際應用中,伺服器可以和多個客戶端通訊,那該使用哪種技術實現?

多執行緒實現多客戶通話的機制:step1:伺服器端建立SeverSocket,迴圈呼叫accept()等待客戶端連線。Step2:客戶端建立一個socket並請求與伺服器端連線 step3:伺服器端接收客戶端的請求,建立socket與該客戶建立專線連線 step4:建立連線的兩個socket在一個單獨的執行緒上對話 step5:伺服器端繼續等待新的連線

try {    //建立一個伺服器端socket,即serversocket繫結埠監聽

    ServerSocket serversocket=new ServerSocket(8888);

//利用accept()迴圈等待埠連線

    Socket socket=null;

    int count=0;

    System.out.println("伺服器等待客戶端的連線");

    while(true){

socket=serversocket.accept();

//迴圈連線,一旦連線上建立一個新的執行緒

MultiThread multithread=new MultiThread(socket);

//啟動執行緒

multithread.run();

count++;

    }

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

建立一個專門的執行緒類的程式碼,copy上面的單一的一對一的server的程式碼

publicclass MultiThread extends Thread {

//建立專門的執行緒類來處理客戶端的請求

//建立一個與本執行緒相關的socket,每一個不同的客戶端對應著不同的socket

Socket socket=null;//屬性

//帶引數的構造器,初始化socket屬性值

public MultiThread(Socket socket){

this.socket=socket;

}

//執行緒執行的操作,也就是定義一個方法響應客戶端的請求

public void run(){

//利用輸入輸出流通訊,利用輸入流來讀取客戶端的資訊

相關推薦

Java通訊知識點彙集

網路通訊是怎麼煉成的?Socket程式設計 兩臺計算機通過網路進行通訊的必備條件是什麼:IP地址,埠號,協議 Tcp/ip協議是最廣泛的網路協議 Transfer control protocol

java 基礎之知識點彙集

大概記得:1、單例的幾種方式 2、抽象工廠與工廠的區別 3、nio與io的區別 4、高內聚低耦合 5、mq的兩種傳送方式 6、垃圾回收演算法 7、error、exception、runtimeexception 8、怎麼設計軟體:要參考什麼設計原則 9、https機制、http結構 10、類載入 11、jm

java知識點3

調用 靜態 編譯器 ted .cn sta 語義 ron 過程 調用對象方法的執行過程: 編譯器查看調用對象的類型和方法名 編譯器查看調用方法時提供的參數類型 如果是靜態綁定方法(private、static、final),編譯器可以直接確定下來 虛擬機調用x實際對象最適

java知識點6

參數化 類型轉換 spa mage 普通 ron nag 子類 ges 使用泛型機制編寫的代碼,要比那些雜亂的使用Object類型的變量,在進行強制類型轉換的代碼有更好的安全性和可讀性。 泛型類: 類型變量T放在類名之後,用<>,泛型類可以看做普通類的工廠。

java知識點7

ima 需要 art ges strong mina ava tail rmi 進程:每個進程擁有自己的一整套變量 線程:共享數據 調用Thread.sleep不會創建一個新的線程,sleep是Thread類的靜態方法,用於暫停當前線程。 定義線程建議通過Runnable接

java知識點8

img 字節 數據 ron 單例 blog put input 序列 可以從中讀入一個字節序列的對象叫做輸入流,可以向其寫出一個字節序列的對象叫做輸出流。 close方法:關閉流,flush緩沖區 字節流: 字符流: FilterInputStream 二進制

java知識點9

sax 解析 http 文檔類型 技術分享 小知識點 .com -1 nbsp XML的結構: 文檔頭 文檔類型定義 文檔正文 解析XML: Dom樹形解釋器 SAX流機制解釋器 java小知識點9

java 面試知識點

run 定性 als insert語句 核心 適合 說明 技術 目的 關於基礎知識:你可以看看這些名詞或知識點,看是否能說出個一二三四來。JavaSE----基本語法、數據類型、操作符等:int、long、Integer、Long、if、else、for、while----

java基礎知識點回顧

rup override text 使用 public fault 進程同步 訪問 都是 java基礎數據類型 bollean 1 char 2 byte 1, short 2 , int 4, long 8 float 4, double 8 --------------

JAVA知識點記錄

val ++ returns 選擇 bytes undle note utf long 1.Mah.ceil() * Returns the smallest (closest to negative infinity) * {@code dou

JAVA基礎知識點

表達式2 分開 strong ole 出現 bool tro last 位置 聲明常量:final 數據類型 常量名稱[=值] 例如 : final double PI = 3.1415926; 三元運算符 : 條件式?值1:值2 例如 : boolean b=

Java面試知識點總結

可見 一點 增強 但我 link 應對 pen sleep executors 本篇文章會對面試中常遇到的Java技術點進行全面深入的總結,幫助我們在面試中更加得心應手,不參加面試的同學也能夠借此機會梳理一下自己的知識體系,進行查漏補缺(閱讀本文需要有一定的Java基礎;

java知識點

java sys pre 取整 進制 等於 ini 知識 println 1.java 1/0運行結果拋異常,1/0.0結果是infinity(無窮大)2.a%d定義為 (a/b)b+a%d=a (a/b的商會向0取整)因此-14%3 =-2 ;而14%-3=23.&

java整理知識點

java 整理知識點為什麽要將map轉為set?因為map是存的鍵值對,轉為set後,可以進行遍歷,這樣就可以將map中的所有鍵值對都取出來。Set<WebSocket> keySet = map.keySet(); /** * 獲取WebSocket * @param use

一些必須掌握的Java基礎知識點

搜索 home 構建 kit 列表 classpath cto lean pri 我們先來了解一下Java基礎知識,以便於我們對Java的體系有個全面掌握和認知。 一、基礎知識 1.Java的三種技術架構 JAVAEE:Java Platform Enterprise Ed

java基本知識點

ntc 一個 學習 數據庫 數據 acm 期待 發現 設計模式 好久沒寫博客了,今天看算法題實在是想睡覺(無聊ing),想睡覺另一方面也表示自己算法可能太菜看不懂 java的知識點基本就是基本語法,集合,多線程,IO,jvm,數據庫,spring,設計模式,基本的排序算法,

JAVA面試知識點總結--資料型別

一、資料型別 基本資料型別 數值型別: 運算and型別轉換 自動裝拆箱and比較 bool

java學習知識點列表

J2SE基礎 1. 九種基本資料型別的大小,以及他們的封裝類。 2. Switch能否用string做引數? 3. equals與==的區別。 4. Object有哪些公用方法? 5. Java的四種引用,強弱軟虛,用到的場

【C語言實現串列埠通訊知識點整理(四)】關於執行緒和程序

轉載:https://www.cnblogs.com/fuchongjundream/p/3829508.html 因為在外部檔案中呼叫結構體沒有用extern修飾,導致獲取不到正確的值,一直糾結線上程上。現在大概總結執行緒和程序的特點: 概念 1、程序(process) 狹義定義:

【C語言實現串列埠通訊知識點整理(三)】串列埠開啟、設定資料成功後進行資料讀寫

int OpenDev(char *Dev) { int fd = open(Dev,O_RDWR | O_NOCTTY | O_NONBLOCK); if(-1 == fd) { perror("Can't Open Serial Port"); return -1;