背景:做測試工作時,經常碰到只做上游,或只做下游專案的情況。此時需要自己寫指令碼模擬另一端的資料。本文在此記錄如何實現乙個簡單的socket通訊。
client.py
import socket
import threading
import time
host = '127.0.0.1'
post = 50009
def loop():
s = socket.socket(socket.af_inet, socket.sock_stream)
# 建立連線:
s.connect((host, post))
n = 0
while n < 10:
n = n + 1
data_heartbeat = b'$000001#'
s.sendall(data_heartbeat)
time.sleep(1)
print(s.recv(1024).decode("gbk")) # 列印接收服務端的資料
for i in range(3):
t= threading.thread(target=loop, name='loopthread').start()
server.py
import socketserver
import time
class handler(socketserver.baserequesthandler):
def setup(self):
"""連線成功,塞入連線池"""
self.request.sendall("connect success!".encode(encoding='gbk')) # 向客戶端傳送連線成功資訊
print("connected by ", self.client_address)
def handle(self):
""" 收到訊息處理,異常或空訊息,斷開連線,心跳則返回訊息"""
try:
while true:
self.data = self.request.recv(1024)
print("online num", len(socket_request_pool))
print("{} send:".format(self.client_address), self.data.decode(encoding="gbk"))
if not self.data:
print("connection lost")
self.remove()
break
self.data_str = self.data.decode('gbk') # 接收到的資料從byte-->str ,gbk編碼
self.data_content = self.data_str.strip('$#') # 去掉首尾字元
if len(self.data_content) == 6:
self.request.sendall(self.data) # 傳送收到的內容,即心跳協議的響應
time.sleep(2)
print("服務端傳送心跳響應成功," + '終端號:' + self.data_content + ',' + time.strftime("%y-%m-%d %h:%m:%s",
time.localtime()))
except exception as e:
print(self.client_address, "connection lost")
self.remove()
finally:
self.request.close()
def finish(self):
""" 環境清理,在handle()之後執行清除操作,預設什麼都不做,
如果setup()和handle()方法都不生成異常,則無需呼叫該方法"""
print("client clean", self.client_address)
def remove(self):
"""連線斷開後,從連線池中刪除socket物件"""
print("client remove")
socket_request_pool.remove(self.request)
print("online num: ", len(socket_request_pool))
if __name__ == '__main__':
address = ('127.0.0.1', 50009)
socket_request_pool = # 連線池
server = socketserver.threadingtcpserver(address, handler)
server.serve_forever()
用多執行緒實現多使用者同時收發的簡單socket服務端
簡單的socket 和多執行緒練習 用socket服務端和多執行緒實現可以連線多個客戶端並同時收發的功能。這裡要用到socket 和 threading 所以,記得 import socket,threading 一 建立socket服務端 首先,按正常操作,建立乙個socket,選擇ipv4和資料...
python 連線mysql 使用sock 及引數
加引數指到mysql的配置 mysqldb.connect user root read default file etc my.conf 例如 conn mysqldb.connect host 10.3.18.142 user user,passwd pwd,db db,read default...
網路程式設計 Python網路程式設計詳解socket
1 伺服器就是一系列硬體或軟體,為乙個或多個客戶端 服務的使用者 提供所需的 服務 它存在唯一目的就是等待客戶端的請求,並響應它們 提供服務 然後等待更多請求。2 客戶端 伺服器架構既可以應用於計算機硬體,也可以應用於計算機軟體。3 在伺服器響應客戶端之前,首先會建立乙個通訊節點,它能夠使伺服器監聽...