如何解决为什么服务器不将消息从客户端 XY 发送到聊天中的其他客户端? - UDP 聊天应用
我目前正在参与我的分布式系统项目。目标是编写一个聊天应用程序。不幸的是,服务器不会将消息发送给其他聊天参与者。有人能告诉我代码中的错误在哪里吗? 聊天基于UDP。
下面显示了我的服务器和客户端脚本。如果我运行这两个脚本,那么所有消息都会到达服务器。但它不执行代码: server_socket.sendto(data,client)。这段代码有错吗?
服务器脚本:
import multiprocessing
import socket
import os
import time
class Server(multiprocessing.Process):
def __init__(self,server_socket,received_data,client_address):
super(Server,self).__init__()
self.server_socket = server_socket
self.received_data = received_data
self.client_address = client_address
# Override run method
def run(self):
# Message to be sent to client
message = 'Hi ' + self.client_address[0] + ':' + str(self.client_address[1]) + '. This is server ' + str(os.getpid())
# Send message to client
self.server_socket.sendto(str.encode(message),self.client_address)
print('Sent to client: ',message)
if __name__ == "__main__":
#create clients list
clients = []
# Create a UDP socket
server_socket = socket.socket(socket.AF_INET,socket.soCK_DGRAM)
# Server application IP address and port
server_address = '127.0.0.1'
server_port = 10001
# Buffer size
buffer_size = 1024
# Bind socket to address and port
server_socket.bind((server_address,server_port))
print('Server up and running at {}:{}'.format(server_address,server_port))
while True:
# Receive message from client
data,address = server_socket.recvfrom(buffer_size)
print (time.ctime(time.time()) + str(address) + ": :" + str(data))
#print('Received message \'{}\' at {}:{}'.format(data.decode(),address[0],address[1]))
if address not in clients:
clients.append(address)
#print (clients)
for client in clients:
if client!=address:
server_socket.sendto(data,client)
print (time.ctime(time.time()) + str(address) + ": :" + str(data))
# Create a server process
p = Server(server_socket,data,address)
p.start()
p.join()
客户端脚本:
import socket
import multiprocessing
import os
import time
buffer_size = 1024
shutdown = False
def receive_message(server_address,server_port):
while not shutdown:
try:
while True:
data,addr = client_socket.recvfrom(buffer_size)
print ('Received message: ',data.decode())
except:
pass
if __name__ == '__main__':
# Server application IP address and port
server_address = '127.0.0.1'
server_port = 10001
# Create a UDP socket
client_socket = socket.socket(socket.AF_INET,socket.soCK_DGRAM)
# Message sent to server
message = 'Hi from ' + str(os.getpid()) + ' at ' + server_address + ':' + str(server_port)
# Send data
client_socket.sendto(str.encode(message),(server_address,server_port))
print('Sent to server: ',message)
# Receive response from server
print('Waiting for response...')
data,address = client_socket.recvfrom(buffer_size)
print('Received message: ',data.decode())
for i in range(5):
multiprocessing.Process(target=receive_message,args=("RecvThread",client_socket)).start()
alias = input("Name: ")
message = (alias + ": ")
while message != 'quit':
if message != '':
client_socket.sendto((alias + ': ' + message).encode(),server_port))
message = input(alias + ": ")
time.sleep(0.1)
shutdown = True
client_socket.close()
print ('Socket close')
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。