TCP/IP 网络搭建
1.服务端
-
全局变量
from socket import * from multiprocessing import Process import signal import sys import time from operation_db import Database # 全局变量 HOST = "0.0.0.0" PORT = 8000 ADDR = (HOST, PORT)
-
创建套接字
s = socket() s.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
-
绑定地址与端口
s.bind(ADDR) s.listen(5)
-
循环等待客户端连接
while True: try: c, addr = s.accept() print("connet from", addr) except KeyboardInterrupt: s.close() db.close() sys.exit("服务端退出") except Exception as e: print(e) continue # 为客户端创建子进程 p = Process(target=request, args=(c,)) p.daemon = True # 主进程退出 子进程退出 p.start()
-
子进程处理函数
# 接收客户端请求 def request(c): while True: data = c.recv(1024).decode() # 接收数据 print(c.getpeername(), ":", data) if not data or data[0] == "E": print("子进程退出") sys.exit() # 对应的子进程退出 elif data[0] == "R": pass # 解析 收到命令 c.send(b"OK") # 发送相应的反馈 elif data[0] == "L": pass # 解析 收到命令 c.send(b"Fail") # 发送相应的反馈
-
发送多个结果
c.send(b"OK") # 结果状态 # 循环发送结果 for i in range(10): msg = "%d" % i time.sleep(0.1) # 需要延迟发送 避免粘连 c.send(msg.encode()) time.sleep(0.1) c.send(b"##") # 发送结束字符串
2.客户端
-
连接服务器
from socket import * from getpass import getpass # 运行使用终端 import sys # 服务器地址 ADDR = ("127.0.0.1", 8000) # tcp套接字 s = socket() s.connect(ADDR)
-
发送数据给服务端
msg = "R %s %s" % (name, passwd) s.send(msg.encode()) # 发送给服务器
-
接收服务端的反馈
data = s.recv(128).decode() # 接收结果 if data == "OK": print("成功") else: print("失败")
-
接收多个结果数据
# 接收结果状态 data = s.recv(128).decode() if data == "OK": while True: # 循环接收结果 hist = s.recv(1024).decode() if hist == "##": # 以## 结束 break print(hist) else: # 失败的结果 print("未查到历史记录")