
*****
## Python socket編程
### IP地址
目的:用來標記網絡上的一臺電腦
### windows和Linux查看網卡信息
- Linux中 ifconfig
- windows中 ipconfig
### IP地址的分類

### 端口

### 端口分類
1.知名端口(well known ports)
- 80端口分配給HTTP服務
- 21端口分配給FTP服務
- 范圍是從0到1023
2.動態端口
動態端口的范圍是從1024-65535
## socket簡介
### TCP/IP協議
TCP/IP協議是Transmission Control Protocol/Internet Protocol的簡寫,即傳輸控制協議/因特網互聯協議,又名網絡通訊協議,是Internet最基本的協議、Internet國際互聯網絡的基礎,由網絡層的IP協議和傳輸層的TCP協議組成。
<br>TCP/IP 定義了電子設備如何連入因特網,以及數據如何在它們之間傳輸的標準。協議采用了4層的層級結構,每一層都呼叫它的下一層所提供的協議來完成自己的需求。
### TCP/IP協議
TCP/IP網絡模型四層模型從根本上和OSI七層網絡模型是一樣的,只是合并了幾層

### socket
socket又稱"套接字",應用程序通常通過"套接字"向網絡發出請求或者應答網絡請求,使主機間或者一臺計算機上的進程間可以通訊。白話說,socket就是兩個節點為了互相通信,而在各自家里裝的一部'電話'。
### socket的使用
1.創建套接字
2.使用套接字收/發數據
3.關閉套接字
### udp發送與接收程序
> udp發送數據
~~~
import socket
def main():
# 創建一個udp套接字
udp_socket = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
udp_socket.sendto(b'nihao',('192.168.0.162',8080))
# 關閉socket
udp_socket.close()
if __name__ == '__main__':
main()
~~~
> udp接收數據
1 創建套接字
2 綁定本地信息(IP和端口)
3 接受數據
4 打印數據
5 關閉套接字
### 端口綁定問題
如果程序運行時,沒有綁定端口,那么操作系統會自動分配一個端口給程序。 而且同一端口,不能用兩次。
### udp聊天器
1.創建套接字 套接字是可以同時收發數據的
2.發送數據
3.接收數據
### TCP介紹
- TCP協議,傳輸控制協議,是一種面向連接的、可靠的、基于字節流的傳輸層通信協議
- TCP通信需要經過創建連接、數據傳送、終止連接三個步驟。
- TCP通信模型中,在通信開始之前,一定要先建立相關連接,才能發生數據。
### TCP特點
- 面向連接
- 通信雙方必須先建立連接才能進行數據的傳輸
- 可靠傳輸
- TCP采用發送應答機制
- 超時重傳
- 錯誤校驗
- 流量控制和阻塞管理
### TCP與UDP區別總結
1、TCP面向連接;UDP是無連接的,即發送數據之前不需要建立連接
2、TCP提供可靠的服務。也就是說,通過TCP連接傳送的數據,無差錯,不丟失,不重復,且按序到達;UDP盡最大努力交付,即不保證可靠交付
3、UDP具有較好的實時性,工作效率比TCP高,適用于對高速傳輸和實時性有較高的通信或廣播通信。
4、每一條TCP連接只能是點到點的;UDP支持一對一,一對多,多對一和多對多的交互通信
5、TCP對系統資源要求較多,UDP對系統資源要求較少。
### UDP通信

### TCP通信

### TCP客戶端
服務器端:就是提供服務的一方,而客戶端,就是需要被服務的一方
### TCP客戶端構建流程
1.創建socket
2.鏈接服務器
3.接收數據(最大接收2014個字節)
4.關閉套接字
### TCP服務端
1 socket創建套接字
2 bind綁定IP和port
3 listen使套接字變為可以被動鏈接
4 accept等待客戶端的鏈接
5 recv/send接收發送數據
### TCP服務端為多個客戶端服務
### 文件下載器
#### TCP客戶端
1.創建套接字
2.目的信息 服務器的ip port
3.連接服務器
4.輸入要下載的文件名稱
5.發送文件下載請求
6.接收對方發送過來的數據
7.接收到數據在創建文件
8.關閉套接字
#### TCP服務端
1 socket創建套接字
2 bind綁定IP和port
3 listen使套接字變為可以被動鏈接
4 accept等待客戶端的鏈接
5 recv/send接收發送數據