網路:個人java筆記(1)

通訊協議大概分五層。
分層優勢 : 不須要管具體實現,只須要作本身的事情。
分層標準:
OSI 參考模型
TCP/IP 參考模型
TCP/IP 詳解(瞭解網絡底層的書)
IPV6 的相關問題
 
TCP 爲可靠的因特網鏈接
UDP 爲不可靠的因特網鏈接
 
 
Socket 的基本概念:
兩個 java 應用程序能夠經過一個雙向的網絡通訊鏈接實現數據交換,這個雙向鏈路的一端稱爲一個 Socket
Socket 一般用來實現 client server 鏈接。( CS 模式,客戶端服務器模式)
java.net 包中定義兩個類 Socket ServerSocket ,分別用來實現雙向連接的 client server 端。
創建鏈接時所需的尋址信息爲遠程計算機的 IP 地址和端口號( Port number
 
網絡編程: Socket 編程
 
ServerSocket TCP 上的服務器端口。
 
IP 地址和端口號(Port number
端口號表示應用程序的識別碼
相似於IP  端口號爲兩個字節最多有65536 個端口
一個應用程序能夠應用多個端口號
 
注意一點:本身編程佔用端口號時:儘可能用 1024 以上的端口號,由於 1024 如下的端口系統有可能徵用。
 
關於數據的傳輸使用流的概念。
流的東西在 java.io.* 包中。
 
Socket 端口上有個 getInputStream() 方法
注意: DataInputStream 類中的 readUTF ();方法也是阻塞式的方法。
 
ServerSocket 的方法accept()也爲阻塞式的。
因爲readUTF方法爲阻塞式的
則會產生以下問題:
當一個客戶端調用服務器的時候進行通訊調用readUTF()方法時,就會產生阻塞,其餘的客戶端就沒法訪問服務器。
 
在服務器中使用 Socket getInetAddress 獲取客戶端的端口號
CS 之間的數據傳輸:使用流概念就是: OutPutStream InPutStream
能夠在各類流上添加相應的處理流。用來方便處理。
 
如今咱們能夠作一個簡單的聊天程序。
 
做業。。。。。。。。。


小例子:
客戶端:
import java.net.*;
public class TCPClient
{
    public void main(String[] args) throws Exception
    {
        Socket cl = new Socket("127.0.0.1",6666);//有異常產生,127.0.0.1爲本地IP地址。6666爲端口號
       
    }
}


服務器端:

import java.net.*;public class TCPServer{    public void main(String[] args) throws Exception    {        ServerSocket a=new ServerSocket(6666);//監聽6666端口號 有異常產生,能夠拋出。        while(true)//服務器端爲死循環,一直循環等待客戶端鏈接。        {        Socket s=a.accept();//在服務器上建立一個和客戶端相鏈接的Socket端口,拋出IO異常。這時候只能接受一個客戶端的鏈接,由於一個Acception只能接受一個客戶端鏈接。        //Accept方法爲阻塞式的方法。        System.out.println("鏈接結束");        }            }}
相關文章
相關標籤/搜索