Java Socket應用

Java Socket應用

兩臺計算機經過網絡進行通訊方法

1.惟一的ip地址java

2.協議服務器

3.端口號網絡

IP地址

爲實現網絡中不用計算機之間的通訊,每臺計算機都必須有一個惟一的一個標識---IP地址多線程

IP地址格式:數字型,如:192.168.0.1(32位的二進制)socket

IPV4:是互聯網協議(Internet Protocol,IP)的第四版,也是第一個被普遍使用,構成現今互聯網技術的基礎的協議。1981年 Jon Postel 在RFC791中定義了IP,Ipv4能夠運行在各類各樣的底層網絡上,好比端對端的串行數據鏈路(PPP協議和SLIP協議) ,衛星鏈路等等。局域網中最經常使用的是以太網。this

TCP/IP協議

TCP/IP是目前世界上應用最爲普遍的協議.net

是以TCP和IP爲基礎的不一樣層析上多個協議的集合線程

也稱爲;TCP/IP協議族或TCP/IP協議棧code

TCP:TransmissionControl Protocol 傳輸控制協議orm

IP:Internet Protocol 互聯網協議

TCP/IP模型

端口

1.用於區分不一樣應用程序

2.端口號範圍爲0-65535,其中0-1023爲系統所保留

3.IP地址和端口號組成了所謂的Socket,Socket是網絡上運行的程序之間雙向通訊鏈路的終結點,是TCP和UDP的基礎

Java中的網絡支持

InetAddress類

InetAddress類

1.InetAddress類用於標示網絡上的硬件資源,表示互聯網協議(IP)地址 獲取本機的InetAddress實例

InetAddress address=InetAddress.getLocalHost();

System.out.println("計算機名:"+address.getHostName());

  • 經過Inetaddress.getLocalHost()方法獲取本地主機實例; 也可經過Inetaddress.getByName()方法,經給定的主機名或IP地址來取得主機實例

InerAddress實例獲取:

一、經過主機名和ip地址來獲取 。
   InetAddress.getByName("機器名");
   InetAddress.getByAddress(ip地址);
二、也可經過getLocalHost()方法來獲取實例。

URL

1.URL(Uniform Resource Locator)統一資源定位符,表示Internet上某一資源的地址

2.URL由兩部分組成:協議名稱和資源名稱,中間用冒號隔開

3.在java.net包中,提供了URL類來表示URL

錨點:是指同一頁面中的不一樣位置連接。例如,一個很長的頁面,在頁面的最下方有一個「返回頁首」的文字,單擊連接後,能夠跳轉到這個頁面最頂端,這就是一種最典型的錨點連接。經過點擊命名錨點,可以快速重定向網頁特定的位置(好比快速到頁首、頁尾或者網頁中某篇文章處),便於瀏覽者查看網頁內容。相似於咱們閱讀書籍時的目錄頁碼或章回提示。

使用URL讀取網頁內容

1.經過URL對象的openStream()方法能夠獲得指定資源的輸入流

2.經過輸入流能夠讀取、訪問網絡上的數據

Socket簡介

Socket通訊 1.TCP協議是面向對象鏈接、可靠的、有序的,以字節流的方式發送數據

2.基於TCP協議實現網絡通訊的類

客戶端的Socket類

服務器端的ServerSocket類

Socket通訊實現步驟

1.建立ServerSocket和Socket

2.打開鏈接到Socket的輸入/輸出流

3.按照協議對Socket進行讀/寫操做

4.關閉輸入輸出流、關閉Socket

客戶端步驟:

1.建立客戶端Socket,指定服務器地址和端口 Socket socket=new Socket("IP地址","端口號"); 2.獲取輸出流,向服務器發送信息 OutputStream os=socket.getOutputStream();//字節輸出流 PrintWriter pw=new PrintWriter(os);//將輸出流包裝爲打印流 pw.write("用戶名:admin;密碼:123"); pw.flush(); socket.shutdownOutput();//關閉輸出流 //關閉相應的資源 pw.close(); os.close(); socket.close();

應用多線程來實現服務器與多客戶端之間的通訊

基本步驟 1.服務器端建立ServerSocket,循環調用accept()等待客戶端鏈接 2.客戶端建立一個socket並請求和服務器端鏈接 3.服務器端接收客戶端請求,建立socket與該客戶創建專線鏈接 4.創建鏈接的兩個socket在一個單獨的線程上對話 5.服務器端繼續等待新的鏈接


服務器線程處理類

public class ServerThread extends Thread
{
  //和本線程相關的socket
  Socket socket=null;
  public ServerThread(Socket socket)
{
  this.socket=socket;
}
//線程執行的操做,響應客戶端的請求
public void run()
{
//獲取輸入流,並讀取客戶端信息
//獲取輸出流,反饋信息給客戶端
}
}

服務器的修改

Socket socket=null;
//記錄客戶端的數量
int count=0;
//循環監聽等待
while(true)
{
//調用accept()方法開始監聽,等待客戶端的鏈接
socket=serverSocket.accept();
//建立一個新的線程
ServerThread serverThread=new ServerThread(socket);
//啓動線程
serverThread.start();
count++;
System.out.println(count);
//獲取當前客戶端的IP
InetAddress address=socket.getInetAddress();
System.out.println("當前客戶端的IP:"+address.getHostAddress());
}
相關文章
相關標籤/搜索