服务端源代码
"""
TCP完整版聊天室端对端开发(服务端)
version 1.1.0
author lkk
Email lkk199404@163.com
"""
# 引入所需模块
import socket, threading
import logging
# 定义服务器信息
HOST = ''
PORT = 8888
ADDRESS = (HOST, PORT)
BUFFER = 1024
client = dict()
def engine():
# 创建连接对象
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 绑定主机信息
server.bind(ADDRESS)
# 开始监听
server.listen(128)
# 等待客户端连接
logging.log(60, '等待客户端连接')
while True:
s_socket, address = server.accept()
print('客户端{}连接成功'.format(address))
# 向连接成功的客户端发送信息
s_socket.send('请输入您的昵称'.encode('utf-8'))
# 接受用户发送的昵称信息
name = s_socket.recv(BUFFER).decode('utf-8')
client[name] = (s_socket, address)
c1 = threading.Thread(target=transfer_message, args=(s_socket,), name=name)
c1.start()
def transfer_message(s_socket):
"""消息的转发"""
while True:
msg = s_socket.recv(BUFFER).decode('utf-8')
# 转发指定昵称的客户端
nickname = msg.split(':')[0]
print(nickname)
# 得到指定客户端
target_client = client[nickname][0]
# 给目标用户发送消息
msg = "\n"+threading.current_thread().name + ":" + msg.split(':')[1]
target_client.send(msg.encode('utf-8'))
if __name__ == '__main__':
logging.debug('debug')
engine()
客户端源代码
"""
TCP完整版聊天室端对端开发(客户端)
version 1.1.0
author lkk
Email lkk199404@163.com
"""
# 引入模块
import socket, threading
# 定义服务器信息
HOST = '192.168.11.203'
PORT = 8888
ADDRESS = (HOST, PORT)
BUFFER = 1024
def core():
"""主函数:负责创建套接字、连接指定主机"""
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 连接服务器
client.connect(ADDRESS)
# 接受服务器发送的提示信息
msg = client.recv(BUFFER).decode('utf-8')+':'
name = input(msg)
# 将昵称发送给服务器
client.send(name.encode('utf-8'))
# 与服务器进行通信
sending = threading.Thread(target=send_message, args=(client,))
accept = threading.Thread(target=accept_message, args=(client,))
sending.start()
accept.start()
def send_message(client_socket):
"""发送消息函数"""
while True:
msg = input('发送消息[昵称:内容]')
client_socket.send(msg.encode('utf-8'))
def accept_message(client_socket):
"""接收消息函数"""
while True:
info = client_socket.recv(BUFFER)
print('0.0 :', info.decode('utf-8'))
if __name__ == '__main__':
core()
运行该程序时只需运行一个服务端 运行多个客户端就能够实现客户端之间的信息发送
操作说明
启动服务端程序 保持一直运行状态
运行多个客户端程序 首先提示用户输入昵称 当有多个用户成功连接到服务器时 只要按照[昵称:内容]这个样式即可将消息发送给某用户