多线程C/S交互
妈的,代码这玩意就他妈是不写就忘,前两天刚看的,今天写就磕磕绊绊的
服务端
from socket import *
from threading import Thread, current_thread
import time
def worker(client_sock):
try:
while True:
recv_data = client_sock.recv(1024)
print('[{}]: {} {}'.format(time.strftime("%Y-%m-%d %H:%M:%S"), current_thread().name, recv_data))
if len(recv_data) <= 0:
break
if recv_data.decode() == 'hi':
client_sock.send('hello!'.encode())
else:
client_sock.send('say hi.'.encode())
finally:
client_sock.close()
def main():
try:
server_socket = socket(AF_INET, SOCK_STREAM)
host_port = ('127.0.0.1', 7788)
server_socket.bind(host_port)
server_socket.listen(5)
print('Start listen...')
while True:
client_socket, client_addr = server_socket.accept()
t = Thread(target=worker, args=(client_socket,))
t.start()
finally:
server_socket.close()
if __name__ == '__main__':
main()
客户端
root@iZ947mgy3c5Z:/prodata/scripts# cat multi_thread_client.py
from socket import *
from multiprocessing import Pool, current_process
from threading import Thread, current_thread
import time
host_port = ('127.0.0.1', 7788)
def worker():
try:
client_socket = socket(AF_INET, SOCK_STREAM)
client_socket.connect(host_port)
while True:
time.sleep(1)
client_socket.send('hi'.encode())
print('[{}]: {}'.format(time.strftime("%Y-%m-%d %H:%M:%S"), current_thread().name))
finally:
client_socket.close()
def main():
t1 = Thread(target=worker, name="t1")
t2 = Thread(target=worker, name="t2")
t3 = Thread(target=worker, name="t3")
t4 = Thread(target=worker, name="t4")
t1.start()
t2.start()
t3.start()
t4.start()
if __name__ == '__main__':
main()