Python 實現簡單的socket通訊

2022-09-19 20:12:15 字數 2429 閱讀 2626

背景:做測試工作時,經常碰到只做上游,或只做下游專案的情況。此時需要自己寫指令碼模擬另一端的資料。本文在此記錄如何實現乙個簡單的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 在伺服器響應客戶端之前,首先會建立乙個通訊節點,它能夠使伺服器監聽...