Java通訊知識點彙集
網路通訊是怎麼煉成的?Socket程式設計
兩臺計算機通過網路進行通訊的必備條件是什麼:IP地址,埠號,協議
Tcp/ip協議是最廣泛的網路協議
Transfer control protocol 傳輸控制協議 Internet protocol網際網路協議
網路分為五層:最底層的是物理層,使用者最直觀接觸的,網線,網絡卡
資料鏈路層,網路層,傳輸層指的就是tcp/ip協議,最上方的就是應用層指的也是使用者能夠接觸到的比如是http超文字傳輸協議,ftp檔案傳輸協議,smtp,talet
每個機器都必須有一個身份的標識,那就是IP地址
埠號就是標識不同的應用程式,0~65535,其中0~1023
IP地址和埠號組成了所謂的Socket,類似於電話的分機號和電話號碼,這樣才能組成一個通訊鏈路的終結點,是TCP和UDP的基礎
http:80 ftp:21 telnet:23
Java提供的網路功能的四大類:InetAddress用於標識網路上的硬體資源,URL統一資源定位符,通過URL可以直接讀取或者寫入網路上的資料,Socket使用tcp協議實現通訊socket相關的類,Datagram使用UDP協議,將資料儲存在資料包中,通過網路進行通訊。
URL(unit resourcelocator)是由協議名稱和資源名稱組成,中間是用冒號隔開,在Java.net中,提供了URL
如何使用URL讀取網頁內容?
通過URL物件的openStream()方法可以指定資源的輸入流,通過輸入流可以讀取,訪問網路上的資源
Socket通訊模型:“建立連線”伺服器建立服務端去傾聽socket,客戶端建立連線socket並向伺服器端傳送請求,等待並且接收連線請求,接收請求後建立連線socket。“開始通訊” inputstream和outputstream,“結束通訊”關閉socket及其相關資源
Socket通訊步驟:step1:建立伺服器serversocket和客戶端socket 。step2:開啟連線到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;