立即学习:https://edu.youkuaiyun.com/course/play/24797/282211?utm_source=blogtoedu
服务端:
import socket, threading import datetime, os client_list = [] st = socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) st.bind(('192.168.0.118', 8888)) st.listen() def server_target(server_socket, addr): while True: cval = server_socket.recv(2048).decode('UTF-8') if cval is not None: print('客户端:', addr[0], ',内容:', cval) for cl in client_list: cl.send(('主机回复:%s' % cval).encode('utf-8')) with open('txtinfo.txt', 'ab', True) as f: f.writelines((str(datetime.datetime.today()).encode('UTF-8'), ('-客户端地址:' + addr[0] + '-发送内容:' + cval).encode('UTF-8'), (('-主机回复:%s' % cval) + os.linesep).encode('UTF-8'))) while True: # 代表通讯的socket和客户端地址 vala, addr = st.accept() # 保存对应的sockt到列表中 client_list.append(vala) print(addr) with open('txtinfo.txt', 'ab', True) as f: f.write((str(datetime.datetime.today()) + '-客户端地址:' + str(addr[0]) + os.linesep).encode('UTF-8')) # 为客户端对应的sockt启动对应的线程 threading.Thread(target=server_target, args=(vala, addr)).start()
客户端:
''' 通过threading.Thread创建线程 ''' import socket, threading # 简单的客户端 # st = socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) # # 调用connect连接服务器 # st.connect(('192.168.0.118', 8888)) # #一旦建立连接成功之后,server于client虚拟链路连接成功 # print(st.recv(2048).decode('UTF-8')) st = socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) st.connect(('192.168.0.118', 8888)) # 读取 def get_server(client_socket): while True: getser = client_socket.recv(2048).decode('utf-8') #如果返回的数据不是空 if getser is not None : print(getser) else: break threading.Thread(target=get_server, args=(st,)).start() # 发送 while True: inp = input() # 如果为空或者输入exit 则退出循环 if inp is None or inp == 'exit': break # 发送数据 st.send(inp.encode('UTF-8'))