UDP服务器和客户端无法发送和接收消息

时间:2017-06-22 16:05:30

标签: python sockets

我正在使用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不够可靠并且正在丢弃消息?

1 个答案:

答案 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上工作,如果地址不同,您可以保留相同的端口,它应该可以工作。