使用python socket实现双向的tcp通信

很久之前玩过的python socket,今天用来做个双向的通信程序。 服务端代码: server.py # coding: utf-8 # tcp stream server import socket import logging import time import datetime as dt from threading import Thread, currentThread # 配置logging logging.basicConfig( level=logging.INFO, format="%(asctime)s %(levelname)s %(process)s %(threadName)s |%(message)s", ) class Server: """ socket 服务端 """ def __init__(self, host='localhost', port=8099): self._sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) self._sock.bind((host, port)) self.msg = None def read(self, conn: socket.socket = None): """ 从tcp连接里面读取数据 """ while True: try: data = conn.recv(1024).decode() except Exception as e: logging.info("recv failed: %s", e) return logging.info("[R %s]<< %s", currentThread().getName(), data) self.msg = data time.sleep(1) def write(self, conn: socket.socket = None): """ 向tcp连接里面写入数据 """ while True: msg = f"{dt.datetime.now()} - {self.msg}" logging.info("[W %s]>> %s", currentThread().getName(), msg) try: conn.send(msg.encode()) except Exception as e: logging.info("send failed: %s", e) return time.sleep(1) def serve(self): """ 开启服务 """ self._sock.listen() logging.info("Serving...") while True: logging.info("Waiting for connection...") conn, addr = self._sock.accept() logging.info("Recived new conn: %s from %s", conn, addr) # 开启读写线程处理当前连接 Thread(target=self.read, args=(conn, )).start() Thread(target=self.write, args=(conn, )).start() if __name__ == '__main__': s = Server() s.serve() 以上就是服务端代码,简单的开启了一个socket服务器,接受连接,然后开启两个线程,每隔一秒,同时向连接中读写数据。 ...

<span title='2022-04-22 13:53:32 +0800 +0800'>April 22, 2022</span>&nbsp;·&nbsp;3 min&nbsp;·&nbsp;LingZihuan