1.網絡程式設計概述
計算機網絡:
是指将地理位置不同的 具有獨立功能的多台計算機以及外部裝置 通過通信線路連接配接起來
實作 資源共享 和 資訊傳輸
網絡程式設計:
就是用來實作網際網路的不同計算機上運作的應用程式間資料的交換
網絡程式設計三要素:
IP位址 端口号 傳輸協定
IP位址:
每個裝置在網絡中的唯一辨別
ipconfig 指令 可以檢視本機的ip位址
ping 指令 測試連接配接
IPV4 4個位元組組成 0~255之間
IPV6 每組4個16進制數
兩個特殊的ip位址:
127.0.0.1 本地回路位址 就是代表本機 ---> localhost
255.255.255.255 廣播位址
端口号:
給不同的網絡程式都設定了一個不同的辨別 這個辨別就是端口号
端口 是邏輯端口 不是網線的邏輯端口
端口号 由0-65535數字組成 任選
0~1024一般被系統保留 不建議使用
常見頓口:
mysql資料庫 3306
oracle資料庫 1521
web 80
tomcat伺服器 8080
qq 4000
飛秋 2425
端口号是可以修改的
http://localhost:8080/項目名/應用java
傳輸協定:
傳輸協定是定義的通信規則
國際組織定義了一個通用的網絡通信協定 TCP/IP(包括區域網路/廣域網)
聯網的終端裝置 為了更好的進行資訊互動
要遵守這一規則
資料傳輸:
首先會從用戶端的應用層開始 将資料一層一層向下打包
(包裡面包括你要傳輸的資料 你的ip位址 端口号 接收方的ip 端口号)
然後 發送到伺服器 伺服器接收到資料包後 再一層層向上拆包
2.Socket套接字
網絡程式設計 其實就是Socket程式設計
Socket套接字
網絡上具有唯一辨別的ip位址和端口号的組合
用來唯一辨別某個應用程式
通信的兩端 必須都有Socket -->碼頭
網絡通信 就是Socket間的通信
資料在兩個Socket之間 通過IO流進行傳輸
例如 我的電腦安裝了 qq 你的沒裝 就不能用qq通信
3.InetAddress類
ip位址類
String getHostAddress() 傳回 IP 位址字元串(以文本表現形式)。
static InetAddress getByName(String host) 在給定主機名的情況下确定主機的 IP 位址。
static InetAddress getLocalHost() 傳回本地主機。
4.UDP概念和案例
概念:
UDP 使用者資料報協定
特點:
面向無連接配接
資料不安全
速度快
不區分用戶端和服務端
發送的資料大小有限制 一次不能超過64k
例如:
對講機
快遞包裹 封包 --> 位址 --> 如果位址不存在 --> 包裹就丢失了
java.net 包下的類
DatagramSocket此類表示用來發送和接收 資料報包 的套接字
構造方法
DatagramSocket() 表示建立一個預設的套接字 并綁定到本地位址和一個随機端口号
DatagramSocket(int port) 建立資料報套接字并将其綁定到本地主機上的指定端口。
常用方法
void send(DatagramPacket p) 從此套接字發送資料報包。
void receive(DatagramPacket p) 從此套接字接收資料報包。
DatagramPacket 此類表示資料報包。
構造方法
DatagramPacket(byte[] buf, int length, InetAddress address, int port)
構造資料報包,用來将長度為 length 的包 發送 到指定主機上的指定端口号。
從buf數組中 取出length長的資料 建立資料包對象 目标是 address位址上的port端口上
DatagramPacket(byte[] buf, int length)
構造 DatagramPacket,用來 接收 長度為 length 的資料包
将資料包中的length長的資料 裝進buf數組中
常用方法:
byte[] getData() 擷取資料
int getLength() 擷取資料的長度
InetAddress getAddress() 擷取ip位址
int getPort() 擷取端口号
5.TCP概念和案例
概念:
TCP傳輸控制協定
特點:
面向連接配接(三次握手)
資料安全
速度略慢
分為用戶端和服務端
面向連接配接
打電話
用戶端向服務端發起請求
服務端響應請求
用戶端向服務端發送資料
用戶端
java.net
Socket
此類實作用戶端套接字
Socket(String host, int port)
建立一個流套接字并将其連接配接到指定主機上的指定端口号。(也可以就叫“套接字”)。套接字是兩台機器間通信的端點。
InputStream getInputStream() 傳回此套接字的輸入流。
OutputStream getOutputStream() 傳回此套接字的輸出流。
InetAddress getInetAddress() 傳回套接字連接配接的位址。
void shutdownInput() 此套接字的輸入流置于“流的末尾”。
void shutdownOutput() 禁用此套接字的輸出流。
服務端
ServerScoket
此類實作伺服器套接字。伺服器套接字等待請求通過網絡傳入。
它基于該請求執行某些操作,然後可能向請求者傳回結果。
Socket accept()
偵聽并接受到此套接字的連接配接。
主要用于将中文字元串轉換為可傳輸的字元串 static String encode(String s, String enc) 用于将中文字元串轉換為可傳輸的字元串,并指定字元集。編碼 static String decode(String s, String enc) 用于将編碼後的字元串轉換為中文字元串,并指定編碼時的字元集。解碼