gpt4 book ai didi

python - UDP Python : How to make the server broadcast messages the clients send in the UDP Chatroom

转载 作者:太空宇宙 更新时间:2023-11-04 02:51:50 25 4
gpt4 key购买 nike

我正在使用 UDP 套接字在 Python 中制作一个小型聊天室应用程序。我已将其设置为用户选择用户名然后将消息发送到服务器的位置。然后服务器会将消息广播给每个连接的客户端。我设法让服务器正常工作,并且客户端能够向服务器发送消息。问题是服务器没有向连接的其他客户端广播消息。

这是服务器代码:

    from socket import *
import socket
port = 1234
localhost='127.0.0.1'
#Create a socket



try :
s = socket.socket(AF_INET, SOCK_DGRAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
print ('Socket created')
except socket.error:
print ('Error creating socket.')
sys.exit()
#Bind the socket to port and localhost.
try:
s.bind((localhost, port))
except socket.error:
print ('Error while binding.')
sys.exit()
print ('Bind complete.')

while 1:
# receive data from client (data, addr)
d = s.recvfrom(2048)
data = d[0]
addr = d[1]

if not data:
break
print('Client connected at ' + addr[0] + ':' + str(addr[1]))

print('Message[' + addr[0] + ':' + str(addr[1]) + '] - ' +
data.strip().decode("utf-8"))
s.close()

客户端代码:

from socket import *
import socket
import sys
port=1234
localhost='127.0.0.1'


try:
s = socket.socket(AF_INET, SOCK_DGRAM)
except socket.error:
print ('Error creating socket.')
sys.exit()
print ("Connected to chat")
Username= input('Please choose a username: ')
while(1) :
msg = input ('Enter message to send : ')

try :
#Set the whole string
s.sendto('{}: {}'.format(Username,msg).encode('utf-8'), (localhost,port))
# receive data from server (data, addr)
data = s.recvfrom(2048)
reply = data[0]
addr = data[1]

print ( + reply.decode())

except socket.error:
print ('Error sending message ' )
sys.exit()

有什么建议吗?

最佳答案

我认为您对 socket.SO_BROADCAST 的作用感到困惑。它不会导致所有收到的消息都广播到所有客户端。它用于让机器上的网络堆栈知道套接字可用于发送广播数据包(我的意思是目标地址被视为“广播地址”的数据包 - 这包括网络和子网的广播地址,例如 192.168.0.0192.168.0.255 子网 192.168.0.0/24)。

为了使您的聊天应用程序按预期工作,您需要保留所有已连接客户端的日志,然后每当您收到一条消息时,您可以使用 s.sendto()< 将其重新发送给所有客户端.

关于python - UDP Python : How to make the server broadcast messages the clients send in the UDP Chatroom,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43621930/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com