?? java(day16).txt
字號:
網絡編程
網絡基礎知識
網絡編程的目的就是指直接或間接地通過網絡協議與其他計算機進行通訊。
計算機網絡形式多樣,內容繁雜。網絡上的計算機要互相通信,必須遵循一定的協議。目前使用最廣泛的網絡協議是Internet上所使用的TCP/IP協議。
IP地址:計算機在網絡中唯一標識,相對于internet,IP為邏輯地址。
IP地址分類:
A類地址
A類地址第1字節為網絡地址,其它3個字節為主機地址。另外第1個字節的最高位固定為0。
A類地址范圍:1.0.0.1到126.155.255.254。
A類地址中的私有地址和保留地址:
10.0.0.0到10.255.255.255是私有地址(所謂的私有地址就是在互聯網上不使用,而被用在局域網絡中的地址)。
127.0.0.0到127.255.255.255是保留地址,用做循環測試用的。
B類地址
B類地址第1字節和第2字節為網絡地址,其它2個字節為主機地址。另外第1個字節的前兩位固定為10。
B類地址范圍:128.0.0.1到191.255.255.254。
B類地址的私有地址和保留地址
172.16.0.0到172.31.255.255是私有地址
169.254.0.0到169.254.255.255是保留地址。如果你的IP地址是自動獲取IP地址,而你在網絡上又沒有找到可用的DHCP服務器,這時你將會從169.254.0.0到169.254.255.255中臨得獲得一個IP地址。
C類地址
C類地址第1字節、第2字節和第3個字節為網絡地址,第4個個字節為主機地址。另外第1個字節的前三位固定為110。
C類地址范圍:192.0.0.1到223.255.255.254。
C類地址中的私有地址:
192.168.0.0到192.168.255.255是私有地址。
D類地址
D類地址不分網絡地址和主機地址,它的第1個字節的前四位固定為1110。
D類地址范圍:224.0.0.1到239.255.255.254
Mac地址:每個網卡專用地址,也是唯一的。
端口(port):應用程序(進程)的標識(網絡通信程序)OS中可以有65536(2^16)個端口,進程通過端口交換數據。連線的時候需要輸入IP也需要輸入端口信息。
計算機通信實際上的主機之間的進程通信,進程的通信就需要在端口進行聯系。
192.168.0.23:21
協議:為了進行網絡中的數據交換(通信)而建立的規則、標準或約定,協議是為了保證通信的安全。
不同層的協議是完全不同的。
OSI網絡參考模型(理論性較強的模型)
七層,應用層、表示層、會話層、傳輸層、網絡層、數據鏈路層、物理層:
網絡層:尋址、路由(指如何到達地址的過程)
傳輸層:端口連接
TCP模型:應用層/傳輸層/網絡層/網絡接口
層與層之間是單向依賴關系,上層依賴于下層,下層不依賴于上層,層與層之間的連接是虛連接。對等層之間建立協議。
端口是一種抽象的軟件結構,與協議相關:TCP23端口和UDT23端口為兩個不同的概念。
端口應該用1024以上的端口,以下的端口都已經設定功能。
TCP/IP模型
Application
(FTP,HTTP,TELNET,POP3,SMPT)
Transport
(TCP,UDP)
Network
(IP,ICMP,ARP,RARP)
Link
(Device driver,….)
注:
IP:尋址和路由
ARP(Address Resolution Protocol)地址解析協議:將IP地址轉換成Mac地址
RARP(Reflect Address Resolution Protocol)反相地址解析協議:與上相反
ICMP(Internet Control Message Protocol)檢測鏈路連接狀況。利用此協議的工具:ping , traceroute
TCP Socket
TCP是Tranfer Control Protocol的簡稱,是一種面向連接的保證可靠傳輸的協議。通過TCP協議傳輸,得到的是一個順序的無差錯的數據流。發送方和接收方的成對的兩個socket之間必須建立連接,以便在TCP協議的基礎上進行通信,當一個socket(通常都是server socket)等待建立連接時,另一個socket可以要求進行連接,一旦這兩個socket連接起來,它們就可以進行雙向數據傳輸,雙方都可以進行發送或接收操作。
1) 服務器分配一個端口號,服務器使用accept()方法等待客戶端的信號,信號一到打開socket連接,從socket中取得OutputStream和InputStream。
2) 客戶端提供主機地址和端口號使用socket端口建立連接,得到OutputStream和InputStream。
TCP/IP的傳輸層協議
建立TCP服務器端
一般,我們把服務器端寫成是分發Socket的,也就是總是在運行,
創建一個TCP服務器端程序的步驟:
1). 創建一個ServerSocket
2). 從ServerSocket接受客戶連接請求
3). 創建一個服務線程處理新的連接
4). 在服務線程中,從socket中獲得I/O流
5). 對I/O流進行讀寫操作,完成與客戶的交互
6). 關閉I/O流
7). 關閉Socket
ServerSocket server = new ServerSocket(post)
Socket connection = server.accept();
ObjectInputStream put=new ObjectInputStream(connection.getInputStream());
ObjectOutputStreamo put=newObjectOutputStream(connection.getOutputStream());
處理輸入和輸出流;
關閉流和socket。
典型的服務器端。
public class Server1 {
public static void main(String[] args) throws Exception {
ServerSocket ss=new ServerSocket(9000);
while(true){
Socket s=ss.accept();//獲得一個Socket對象。
Thread t=new Thread1(s);//分發Socket。
t.start();
}
}
}
class Thread1 extends Thread{
Socket s;
public Thread1(Socket s){
this.s=s;
}
public void run(){
try {
OutputStream o=s.getOutputStream();
PrintWriter out=new PrintWriter(o);
out.println("Hello Client");
out.flush();
s.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
建立TCP客戶端
創建一個TCP客戶端程序的步驟:
1).創建Socket
2). 獲得I/O流
3). 對I/O流進行讀寫操作
4). 關閉I/O流
5). 關閉Socket
Socket connection = new Socket(127.0.0.1, 7777);
ObjectInputStream input=new ObjectInputStream(connection.getInputStream());
ObjectOutputStream utput=new ObjectOutputStream(connection.getOutputStream());
處理輸入和輸出流;
關閉流和socket。
練習:
實現一個網絡應用,客戶端會給服務器發送一個字符串,服務器會把這個字符串轉換成大寫形式發回給客戶端
并有客戶端顯示,同時,服務器會告知客戶端,他是第幾個客戶端
UDP socket
這種信息傳輸方式相當于傳真,信息打包,在接受端準備紙。
先由客戶端給服務器發消息。以告訴服務器客戶端的地址。
特點:
1) 基于UDP無連接協議
2) 不保證消息的可靠傳輸
3) 它們由Java技術中的DatagramSocket和DatagramPacket類支持
DatagramSocket(郵遞員):對應數據報的Socket概念,不需要創建兩個socket,不可使用輸入輸出流。
DatagramPacket(信件):數據包,是UDP下進行傳輸數據的單位,數據存放在字節數組中,其中包括了目標地址和端口以及傳送的信息(所以不用建立點對點的連接)。
DatagramPacket的分類:
用于接收:DatagramPacket(byte[] buf,int length)
DatagramPacket(byte[] buf,int offset,int length)
用于發送:DatagramPacket(byte[] buf,int length, InetAddress address,int port )
DatagramPacket(byte[] buf,int offset,int length,InetAddress address,int port)
注:InetAddress類網址用于封裝IP地址
沒有構造方法,通過
InetAddress.getByAddress(byte[] addr):InetAddress
InetAddress.getByName(String host):InetAddress
等。
建立UDP 發送端
創建一個UDP的客戶端的程序的步驟:
1). 創建一個DatagramPacket,其中包含發送的數據和接收方的IP地址和端口
號。
2). 創建一個DatagramSocket,其中包含了發送方的IP地址和端口號。
3). 發送數據
4). 關閉DatagramSocket
byte[] buf = new byte[1024];
DatagramSocket datagramSocket = new DatagramSocket(13);// set port
DatagramPackage intputPackage = new DatagramPackage(buf,buf.length);
datagramSocket.receive(inputPackage);
DatagramPackage outputPackage = new DatagramPackage(buf,0,buf.length,inetAddress,port);
datagramSocket.send(outputPackage); //客戶端向服務器發信的過程
沒建立流所以不用斷開。
建立UDP 接受端
創建一個UDP的服務器端的程序的步驟:
1). 創建一個DatagramPacket,用于存儲發送方發送的數據及發送方的IP地址和端口號。
2). 創建一個DatagramSocket,其中指定了接收方的IP地址和端口號。
3). 接收數據
4). 關閉DatagramSocket
byte[] buf = new byte[1024];
DatagramSocket datagramSocket = new DatagramSocket();//不用設端口,因為發送的包中端口
DatagramPackage outputPackage=new DatagramPackage(Buf,buf.length,serverAddress,serverPort);
DatagramPackage inputPackage=new DatagramPackage(buf,0,buf.length); //收信之前要準備一封空信
datagramSocket.receive(inputPackage);
UDP處理多客戶端,不必多線程,回信可以一封一封的回
在收發信設置為死循環
java.net.URL 統一資源定位器
定位在internet上的某一資源
更高層的網絡傳輸
常用格式
協議名://主機名:端口號/定位尋找主機內部的某一資源
http://www.tarena.com.cn:80/bin/index.html
作用:
1、必須完成
網絡聊天室,以廣播的形式傳輸數據
2、QQ聊天室
實現點對點的數據傳輸
3、統計一個目錄下的所有“.java”文件及子目錄下的".java"文件總共多少行
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -