socket起源於unix,而unix/linux基本哲學之一就是「一切皆檔案」,對於檔案用【開啟】【讀寫】【關閉】模式來操作。socket就是該模式的乙個實現,socket即是一種特殊的檔案,一些socket函式就是對其進行的操作(讀/寫io、開啟、關閉)
socket和file的區別:
1、file模組是針對某個指定檔案進行【開啟】【讀寫】【關閉】
2、socket模組是針對 伺服器端 和 客戶端socket 進行【開啟】【讀寫】【關閉】
python中提供了兩個與socket相關的模組:socket和socketserver。其中socket模組提供了標準的bsd socket api,而socketserver提供了網路伺服器的開發
socket類:表示socket,給構造器傳入不同的引數可以使用不同形式的socket
操作方法:
bind(self, address): 繫結位址和商品,引數address代表包含ip和埠的乙個二元組
listen(self, backlog=none): 監聽埠,引數backlog代表最大連線資料,預設為1
s.accept(): 等待客戶端連線,返回值為包含新的socket物件和客戶端ip的二元組
recv(self, buffersize, flags=none): 接收資料
send(self, data, flags=none): 傳送資料,如果傳送資料很大,需要多次呼叫該方法進行多次傳送
sendall(self, data, flags=none): 連續傳送資料,直接傳送完畢所有資料或發生異常為止
connect(self, address):將客戶端連線到伺服器端
服務端**:
# encoding=utf=8
import socket
host = ''
port = 9999
# 1 建立socket物件
s = socket.socket(socket.af_inet, socket.sock_stream)
# 2 繫結ip和埠
s.bind((host, port))
# 3 監聽埠
s.listen(100)
print('伺服器啟動...')
# 4 等待客戶端連線
conn, addr = s.accept();
print(addr)
# 5 接收客戶端資料
data = conn.recv(1024)
print('從客戶端接收訊息:'.format(data.decode()))
# 6 向客戶端傳送資料
conn.send("hello client".encode())
# 7 釋放socket
conn.close()
s.close()
客戶端**:
# encoding=utf=8
import socket
host = '127.0.0.1'
port = 9999
# 1 建立socket物件
s = socket.socket(socket.af_inet, socket.sock_stream)
# 2 連線伺服器
s.connect((host, port))
# 3 向伺服器傳送資料
s.send(b'hello server')
# 4 從伺服器端接收資料
data = s.recv(1024)
print('從伺服器端接收來的訊息:'.format(data.decode()))
# 5 釋放socket
s.close()
服務端**:upload_server.py
# coding-utf-8
import socket
host = ''
port = 9999
f_name = 'temp.txt'
# 1 建立socket
with socket.socket(socket.af_inet, socket.sock_stream) as s:
# 2 繫結ip位址和埠號
s.bind((host, port))
# 3 開始監聽
s.listen(10)
print('伺服器啟動...')
while true:
# 4 接收客戶端口的連線
with s.accept()[0] as conn:
buff =
while true:
# 5 接收資料
data = conn.recv(1024)
if data:
else:
break
# 將位元組列表合併成乙個位元組列表物件
b = bytes().join(buff)
with open(f_name, 'wb') as f:
f.write(b)
print('伺服器接收資料完成!')
客戶端**:upload_client.py
# coding-utf-8
import socket
host = '127.0.0.1'
port = 9999
file_name = 'data.txt'
# 1 建立socket
with socket.socket(socket.af_inet, socket.sock_stream) as s:
# 2 連線伺服器
s.connect((host, port))
with open(file_name, 'rb') as f:
b = f.read()
# 3 傳送資料
s.sendall(b)
print('客戶端上傳資料完成!')
Python之socket網路程式設計
實現主機間或一台電腦上的程序間進行通訊 例項如下 服務端 匯入socket sys模組 import socket import sys 建立socket物件 serversocket socket.socket socket.af inet,socket.sock stream 獲取本地主機名 h...
python之網路程式設計 socket(套接字)
python2.x python3.x 對於網路程式設計的支援都是非常友好的,本身支援兩部分非常有用的網路程式設計方式 socket是一種計算機網路資料結構,中文譯名 套接字 socket 最初是為同一主機上的應用程式建立,是的主機上執行的乙個程式與另乙個程式之間可以完成資料通訊操作,程式也稱為程序...
網路基礎之socket
我們知道ip層的ip位址可以唯一標示主機,而tcp層協議和埠號可以唯一標示主機的乙個程序,這樣我們可以利用ip位址 協議 埠號唯一標示網路中的乙個程序。能夠唯一標示網路中的程序後,它們就可以利用socket進行通訊了.什麼是socket呢?我們經常把socket翻譯為套接字,socket是在應用層和...