服务器部分代码:
from threading import Thread, Lock
import socket
class Server:
def __init__(self, ip_addr="192.168.0.103", port_num = 8080):
self.ip_addr = ip_addr
self.port_num = port_num
self.cnt = []
self.lock = Lock()
def start_sever(self):
"""启动服务器,并开始监听,每当连接一个客户端,便为他创建一个对应的子线程"""
server = socket.socket()
server.bind((self.ip_addr, self.port_num))
server.listen(1024)
welcome = "欢迎来到JoonGi的聊天室"
while True:
connect, addr = server.accept()
connect.send(welcome.encode(encoding="utf-8"))
self.cnt.append({'obj': connect, 'addr': addr})
recv = Thread(target=self.recv_message, args=(connect,addr))
recv.start()
def recv_message(self, connect, addr):
"""子线程函数:接收消息,并广播消息给每个连接的客户端"""
while True:
data = connect.recv(1024)
msg =data.decode(encoding="utf-8")
self.lock.acquire()
self.lock.release()
print(msg)
for c in self.cnt:
c['obj'].send(msg.encode(encoding="utf-8"))
if data.decode(encoding="utf-8") =="拜拜":
self.cnt.remove({'obj': connect, 'addr': addr})
break
connect.close()
def main():
server = Server()
server.start_sever()
if __name__ == "__main__":
main()
客户端部分代码:
import socket
from threading import Thread, Lock
import datetime
class Client:
def __init__(self, name, address):
self.name = name
self.addr = address
self.lock = Lock()
def start_client(self):
client = socket.socket()
client.connect(self.addr)
"""创建一个接收消息的子线程"""
recv = Thread(target=self.recv_msg, args=(client,))
recv.start()
while True:
msg = input()
msgs =str(datetime.datetime.now())[:-7]+' '+ self.name + ":" + msg
client.send(msgs.encode(encoding="utf-8"))
if "拜拜" in msg:
break
client.close()
def recv_msg(self, client):
"""接收消息的子线程函数"""
while True:
data = client.recv(1024).decode(encoding='utf-8')
print(data)
def main():
client = Client("小红", ('192.168.0.103', 8080))
client.start_client()
if __name__ == "__main__":
main()
服务器端界面展示
2019-04-05 18:25:40 小红:你们好
2019-04-05 18:25:52 小张:大家好
2019-04-05 18:26:02 小红:你们最近怎么样
2019-04-05 18:26:19 小张:I'm fine,thank you
2019-04-05 18:26:32 小红:好哒
2019-04-05 18:26:42 小张:那就拜拜啦
2019-04-05 18:26:48 小红:拜拜
客户端1:
欢迎来到JoonGi的聊天室
你们好
2019-04-05 18:25:40 小红:你们好
2019-04-05 18:25:52 小张:大家好
你们最近怎么样
2019-04-05 18:26:02 小红:你们最近怎么样
2019-04-05 18:26:19 小张:I'm fine,thank you
好哒
2019-04-05 18:26:32 小红:好哒
2019-04-05 18:26:42 小张:那就拜拜啦
拜拜
客户端2:
欢迎来到JoonGi的聊天室
大家好
2019-04-05 18:25:52 小张:大家好
2019-04-05 18:26:02 小红:你们最近怎么样
I'm fine,thank you
2019-04-05 18:26:19 小张:I'm fine,thank you
2019-04-05 18:26:32 小红:好哒
那就拜拜啦