服务器
import socket
from threading import Thread
import struct, json
IP = '127.0.0.1'
PORT = 8080
ADD = (IP, PORT)
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind(ADD)
server.listen(5)
def task(conn):
'''
在子线程内,实现对应客户端等待输入和数据处理
:param conn:
:return:
'''
while True:
try:
b_header = conn.recv(struct.unpack('i', conn.recv(4))[0])
header = json.loads(b_header.decode('utf-8'))
user = header['user']
msg = header['msg']
print('%s : %s' % (user, msg))
except ConnectionResetError:
break
except struct.error:
break
if __name__ == '__main__':
# 等待建立链接,并且执行线程
while True:
conn, c_add = server.accept()
t = Thread(target=task, args=(conn,))
t.start()
>>>client_1 : nihao
>>>client_2 : nihao
>>>client_1 : 你好
>>>client_3 : hello
客户端 1/2/3/4……
import socket,struct,json
IP = '127.0.0.1'
PORT = 8080
S_ADD = (IP,PORT)
client = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
client.connect(S_ADD)
while True:
msg = input('请输入(q退出)>>>').strip()
if msg == 'q':
break
header = {
'user': 'client_1', # 对应修改
'msg': msg
}
j_header = json.dumps(header)
b_header = j_header.encode('utf-8')
s_header = struct.pack('i',len(b_header))
client.send(s_header)
client.send(b_header)
>>>请输入(q退出)>>>nihao
>>>请输入(q退出)>>>