微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么服务器不将消息从客户端 XY 发送到聊天中的其他客户端? - UDP 聊天应用

如何解决为什么服务器不将消息从客户端 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 举报,一经查实,本站将立刻删除。