高級編程之 socker編程

1. 網絡基礎

1-1. IP地址

1-1-1. 目的:

用來標記網絡上的一臺電腦

1-1-2. 如何查看IP

window:

ifconfig

Linux:

ipconfig

1-1-3. IP地址分類

1-1-3-1. IPV4(被廣泛使用的)

  1. IP協議的版本號是4
  2. 當前再用,目前被廣泛應用
  3. IPv4的地址位數爲32位(4位字節)
  4. 地址有限,幾乎全部耗盡

1-1-3-2. IPV6

  1. IP協議的版本號是6
  2. 實驗階段,作爲下一代IP地址
  3. IPv6的地址位數位128位(16位字節)
  4. 號稱可以爲全世界的每一粒啥子編上一個地址

1-2. 端口(port)

1-2-1. 知名端口

  1. 80端口分配給HTTP服務
  2. 21端口分配給FTP服務
  3. 。範圍是從0到1023

1-2-2. 動態端口

動態端口的範圍是從1024-65535

2. socker

2-1. socker 基本概念

2-1-1. 簡介

TCP/IP協議

TCP/IP協議是Transmission Control Protocol/Internet Protocol的簡寫,即傳輸控制協議/因特網互聯協議,又名網絡通訊協議,是Internet最基本的協議、Internet國際互聯網絡的基礎,由網絡層的IP協議和傳輸層的TCP協議組成。

TCP/IP 定義了電子設備如何連入因特網,以及數據如何在它們之間傳輸的標準。協議採用了4層的層級結構,每一層都呼叫它的下一層所提供的協議來完成自己的需求。

TCP/IP協議模型
模型socker
socket又稱"套接字",應用程序通常通過"套接字"向網絡發出請求或者應答網絡請求,使主機間或者一臺計算機上的進程間可以通訊。白話說,socket就是兩個節點爲了互相通信,而在各自家裏裝的一部’電話’。

2-2. socker的使用

  1. 創建套接字
  2. 使用套接字收/發數據
  3. 關閉套接字

2-2-1. UDP發送與接收程序

UDP發送數據

import socket

def main():
	# 創建一個UDP套接字
	udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
	udp_socket.sento(b'nihao', ('192168.0.162', 8080)
	# 關閉socker
	udp_socket.close()


if __name__ == '__main__':
	main()

UDP接收數據

  1. 創建套接字
  2. 綁定本地信息(IP和端口)
  3. 接收數據
  4. 打印數據
  5. 關閉套接字
import socket

def main():
	udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 1 創建套接字

	bind_addr = ('',7789) # 不寫ip,表示本機的任何一個ip
	udp_socket.bind(bind_addr) # 2 綁定本地信息

	while True:
		recv_data = udp_socketrecvfrom(1024) # 3. 1024 表示本次接收最大字節數

		recv = recv_data[0]
		send_data = recv_data[1]

		print("{}:{}".format(str(send_data), recv.decode('gbk')) # 4. 打印數據

	udp_socket.close() # 5. 關閉套接字

if __name__ == '__main__':
	main()

端口綁定問題
如果程序運行時,沒有綁定端口,那麼操作系統會自動分配一個端口給程序。而且同意端口,不能用兩次。

UDP聊天器

  1. 創建套接字,套接字是可以同時收發數據的
  2. 發送數據
  3. 接收數據

2-3. TCP客戶端與服務端

TCP介紹

  • TCP協議,傳輸控制協議,是一種面向連接的、可靠的、基於字節流的傳輸層通信協議
  • TCP通信需要經過創建連接、數據傳送、終止連接三個步驟
  • TCP通信模型中,在通信開始之前,一定要先建立相關連接,才能發生數據

TCP特點

面向連接:

  • 通信雙方必須先建立連接才能進行數據的傳輸

可靠傳輸:

  • TCP採用發送應答機制
  • 超時重傳
  • 錯誤校驗
  • 流量控制和阻塞管理

TCP與UDP區別總給

  1. CP面向連接;UDP是無連接的,即發送數據之前不需要建立連接。
  2. TCP提供可靠的服務。也就是說,通過TCP連接傳送的數據,無差錯,不丟失,不重複,且按序到達;UDP盡最大努力交付,即不保證可靠交付。
  3. UDP具有較好的實時性,工作效率比TCP高,適用於對高速傳輸和實時性有較高的通信或廣播通信。
  4. 每一條TCP連接只能是點到點的;UDP支持一對一,一對多,多對一和多對多的交互通信。
  5. TCP對系統資源要求較多,UDP對系統資源要求較少。

UDP 通信
UDP 通信
TCP 通信
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接收發送數據
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章