日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

Python 网络编程(Socket)

發(fā)布時間:2025/3/12 python 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python 网络编程(Socket) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Python 網(wǎng)絡(luò)編程(Socket)


一、Socket 套接字

1、Socket 編程

  • socket本質(zhì)是編程接口(API),對TCP/IP的封裝,提供可供程序員做網(wǎng)絡(luò)開發(fā)所用的接口。Socket 編程是應(yīng)用進(jìn)程間通信的抽象機(jī)制。
  • 應(yīng)用編程接口API:應(yīng)用進(jìn)程的控制權(quán)和操作系統(tǒng)的控制權(quán)進(jìn)行轉(zhuǎn)換的一個系統(tǒng)調(diào)用接口
  • Socket 的意思為“插座”。是 BSD UNIX 的進(jìn)程通信機(jī)制,通常也稱作"套接字",用于描述IP地址和端口,是一個通信鏈的句柄,可以用來實現(xiàn)不同虛擬機(jī)或不同計算機(jī)之間的通信。在Internet上的主機(jī)一般運行了多個服務(wù)軟件,同時提供幾種服務(wù)。每種服務(wù)都打開一個Socket,并綁定到一個端口上,不同的端口對應(yīng)于不同的服務(wù)。Socket正如其英文原義那樣,像一個多孔插座。一臺主機(jī)猶如布滿各種插座的房間,每個插座有一個編號,提供不同的服務(wù)。 客戶軟件將插頭插到不同編號的插座,就可以得到相應(yīng)的服務(wù)。

2、Socket

Socket 標(biāo)識:

  • 不同主機(jī)間 Socket 連接的標(biāo)識:IP地址+端口號
  • 操作系統(tǒng)/進(jìn)程管理套接字的標(biāo)識:套接字描述符(socket descriptor),小整數(shù)

Socket 創(chuàng)建:

  • 當(dāng)應(yīng)用進(jìn)程創(chuàng)建套接字時,操作系統(tǒng)分配一個數(shù)據(jù)結(jié)構(gòu)存儲該套接字相關(guān)信息,返回套接字描述符
  • 每個進(jìn)程有一個 Socket 描述符表
  • 如果多個進(jìn)程共享一個套接字,關(guān)閉套接字時引用計數(shù)減1,減至0才關(guān)閉
  • 如果進(jìn)程中的一個線程將一個套接字關(guān)閉,該套接字直接關(guān)閉,該進(jìn)程中的其他線程也將不能訪問該套接字

二、TCP

1、客戶端

訪問網(wǎng)站: HTTP 協(xié)議

# 導(dǎo)入socket庫 import socket# 創(chuàng)建一個socket,AF_INET 表示采用 IPv4 網(wǎng)絡(luò)協(xié)議,SOCK_STREAM 表示 TCP 連接 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 建立連接,需指明端口號,web 服務(wù)端口默認(rèn)為 80 s.connect(('www.baidu.com', 80))# 發(fā)送數(shù)據(jù) s.send(b'GET / HTTP/1.1\r\nHost:www.baidu.com\r\nConnection:close\r\n\r\n')# 接收數(shù)據(jù) buffer = [] while True:# 每次最多接收1k字節(jié)d = s.recv(1024)if d:buffer.append(d)else:break data = b''.join(buffer)# 關(guān)閉連接 s.close()# 解析服務(wù)器響應(yīng)數(shù)據(jù) header, html = data.split(b'\r\n\r\n', 1) print(header.decode('utf-8')) # 把接收的數(shù)據(jù)寫入文件 with open('baidu.html', 'wb') as f:f.write(html)

自定義連接:

# 導(dǎo)入socket庫 import socket# 創(chuàng)建一個socket s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 建立連接 s.connect(('127.0.0.1', 5000))# 接收歡迎消息 print(s.recv(1024).decode('utf-8')) for data in [b'Python', b'C++', b'AI']:# 發(fā)送數(shù)據(jù)s.send(data)# 接受數(shù)據(jù)print(s.recv(1024).decode('utf-8'))# 發(fā)送結(jié)束連接信號 s.send(b'exit')# 關(guān)閉連接 s.close()

2、服務(wù)器

# 導(dǎo)入 socket 庫,threading 庫 import socket import threading import time# 處理請求函數(shù) def tcp_link(sock, addr):print('Accept new connection from %s:%s...' % addr)sock.send(b'Welcome!')# 接收、發(fā)送數(shù)據(jù)while True:data = sock.recv(1024)time.sleep(1)if not data or data.decode('utf-8') == 'exit':breaksock.send(('Hello, %s!' % data.decode('utf-8')).encode('utf-8'))# 關(guān)閉連接sock.close()print('Connection from %s:%s closed.' % addr)# 創(chuàng)建一個socket s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 綁定端口 s.bind(('127.0.0.1', 5000))# 監(jiān)聽端口,5表示最多同時監(jiān)聽5個 s.listen(5) print('Waiting for connection...')# 等待連接,處理連接 while True:# 接受一個新連接sock, addr = s.accept()# 創(chuàng)建新線程來處理TCP連接t = threading.Thread(target=tcp_link, args=(sock, addr))t.start()

三、UDP

1、客戶端

# 導(dǎo)入socket庫: import socket# 創(chuàng)建一個socket,SOCK_DGRAM 表示 UDP 連接 s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)# 數(shù)據(jù)發(fā)送與接收 for data in [b'Python', b'C++', b'AI']:# 發(fā)送數(shù)據(jù):s.sendto(data, ('127.0.0.1', 5000))# 接收數(shù)據(jù):print(s.recv(1024).decode('utf-8'))# 關(guān)閉連接 s.close()

2、服務(wù)器

# 導(dǎo)入socket庫: import socket import threading# 處理請求函數(shù) def udp_link(data, addr):print('Received from %s:%s.' % addr)s.sendto(b'Hello, %s!' % data, addr)# 創(chuàng)建一個socket s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)# 綁定端口: s.bind(('127.0.0.1', 5000)) print('Bind UDP on 5000...')# 等待接收數(shù)據(jù)并處理 while True:# 接收數(shù)據(jù):data, addr = s.recvfrom(1024)t = threading.Thread(target=udp_link, args=(data, addr))t.start()

GOOD LUCK!


總結(jié)

以上是生活随笔為你收集整理的Python 网络编程(Socket)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。