本程序为开源程序,可能有点问题,需要没有问题的就在我的文章中找到粉丝专版(这个星期之前完成)或VIP专版(年低完成),希望大家对此有用,好,上代码
服务器:
import socket
import threading
class Server:
def __init__(self, host = '127.0.0.1', port = 55555):
self.host = host
self.port = port
self.server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.server.bind((self.host, self.port))
self.server.listen()
self.clients = []
self.nicknames = []
def broadcast(self, message):
for client in self.clients:
client.send(message)
def handle(self, client):
while True:
try:
message = client.recv(1024)
self.broadcast(message)
except:
index = self.clients.index(client)
self.clients.remove(client)
client.close()
nickname = self.nicknames[index]
self.nicknames.remove(nickname)
self.broadcast(f'{nickname} left the chat!'.encode('ascii'))
break
def receive(self):
while True:
client, address = self.server.accept()
print(f'Connected with {str(address)}')
client.send('NICK'.encode('ascii'))
nickname = client.recv(1024).decode('ascii')
self.nicknames.append(nickname)
self.clients.append(client)
print(f'Nickname of the client is {nickname}!')
self.broadcast(f'{nickname} joined the chat!'.encode('ascii'))
client.send('Connected to the server!'.encode('ascii'))
thread = threading.Thread(target=self.handle, args=(client,))
thread.start()
if __name__ == "__main__":
server = Server()
server.receive()
客户端:
import socket
import threading
class Client:
def __init__(self, host = '127.0.0.1', port = 55555):
self.nickname = input("Enter your nickname: ")
self.client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.client.connect((host, port))
def receive(self):
while True:
try:
message = self.client.recv(1024).decode('ascii')
if message == 'NICK':
self.client.send(self.nickname.encode('ascii'))
else:
print(message)
except:
print("An error occured!")
self.client.close()
break
def write(self):
while True:
message = f'{self.nickname}: {input("")}'
self.client.send(message.encode('ascii'))
def run(self):
receive_thread = threading.Thread(target=self.receive)
receive_thread.start()
write_thread = threading.Thread(target=self.write)
write_thread.start()
if __name__ == "__main__":
client = Client()
client.run()
希望大家点个赞