我正在使用UDP在Python中构建一个简单的网络聊天,但是,当我在一台计算机上运行服务器代码而在另一台计算机上运行客户端时,服务器不会收到任何消息,并且没有消息由客户端发送回客户端。服务器脚本。这是我的代码:
服务器:
import socket, sys
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.bind(('', 9997)) #need higher port
while True:
x = raw_input("Enter your message: ")
sent = sock.sendto(x, ('', 9997))
data, address = sock.recvfrom(4096)
print data, " ", address
sock.close()
客户端:
import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
while True:
print "Waiting to receive"
data, server = sock.recvfrom(4096)
print data
x = raw_input("Enter message: ")
sent = sock.sendto(x, server)
sock.close()
有谁知道我在做错了什么?代码是否正常可能,但UDP不够可靠并且正在丢弃消息?
答案 0 :(得分:1)
正如我所说,由于您的代码似乎有点不清楚(至少对我来说),我给您发了一个非常类似的工作示例。
这是服务器:
import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
server_address = ('localhost', 1932)
sock.bind(server_address)
BUFFER_SIZE = 4096
try:
while True:
data, address = sock.recvfrom(BUFFER_SIZE)
print "Client sends: ", data
reply = raw_input("Your response:\n")
sock.sendto(reply,address)
except KeyboardInterrupt:
sock.close()
服务器创建一个套接字并将其绑定到它的地址和它正在侦听的端口,在我们的例子中是1932。他等待收到的消息,要求回复,然后将其发送回发件人。
这是客户:
import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
client_address = ('localhost', 1931)
server_address = ('localhost', 1932)
sock.bind(client_address)
BUFFER_SIZE = 4096
try:
first_msg = raw_input("Your first message:\n")
sock.sendto(first_msg,server_address)
while True:
data, address = sock.recvfrom(BUFFER_SIZE)
print "Client sends: ", data
reply = raw_input("Your response:\n")
sock.sendto(reply,address)
except KeyboardInterrupt:
sock.close()
它与服务器非常相似,唯一的区别是它会在while
循环之前发送消息,以便启动对话。然后它就像服务器一样进入receive/reply
循环。它也有服务器地址,这是不同的(不同的端口,因为我在localhost上)
try/catch
块只是为了优雅地关闭整个过程。
我在计算机上使用了localhost
和不同的端口并对其进行了测试,并且可以正常工作。您应该只是更改地址以使其在LAN上工作,如果地址不同,您可以保留相同的端口,它应该可以工作。