python / 练习级源码 · 02/20/2023 0

python socket 线程处理小例示

用线程返回随机数给客户端。但注意交互过程中有收发两部分,如果服务器主动关闭进程,很有可能导致客户端被强行断开连接。
import socket
import threading
import random
import time
def handle(nc,np,data):
print("aa")
da = nc.recv(1024)
data = da.decode()
k=random.randint(10,100)
str = "{}".format(k)
print("收到消息:{}新的连接进入:{},基础数量随机k={}".format(data,np[0],str))
nc.send(str.encode('utf-8'))
#nc.close()

def ser():
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)
s.bind(("",9090))
s.listen(128)
while True:
n_c,n_p= s.accept()
da="aa"
print(da)
sub_th=threading.Thread(target=handle,args=(n_c,n_p,da))
#sub_th.setDaemon(True)
sub_th.start()
ser()

下面是客户端(简单封了下,方便调用)

import socket
def client(data, ip, port):
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect((ip, port))
    s.send(data.encode('utf-8'))
    str = s.recv(1024)
    s.close()
    return (str.decode('utf-8'))

a=input("名称是:")
client("{}的数量是多少".format(a),"192.168.1.131",9097)
print("{}的基础数量是:{}".format(a,c))
b=input("数量的单位是:")
print("教室里的{}一共有{}{}".format(a,c,b))