繁体   English   中英

Python套接字-客户端未接收UDP数据报

[英]Python sockets — client not receiving UDP datagram

服务器代码:

s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # server UDP socket
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) # bypass OS lock on port
s.bind((socket.gethostname(), 9999)) # bind socket to host and port 9999
while True:
    message, ip = s.recvfrom(1024) # receive data passed through socket
    print "Server:\n\tMessage \"{}\" received...\n\tIt has a length of {}".format(
            message, len(message))
    s.sendto(str(len(message)), (socket.gethostname(), 9999)) # send message length in bytes back to client
    s.close() # close UDP connection with client
    sys.exit(0) # terminate server process

客户代码:

s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.connect((socket.gethostname(), 9999))
message = "Pointless text."
print "Client:\n\tSending message \"{}\" to the server...\n\tIt has a length of {}".format(
        message, len(message))
s.sendto(message, (socket.gethostname(), 9999))
while True:
    response, ip = s.recvfrom(1024)
    if int(response) == len(message):
        print "Client:\n\tThe server returned count {} which is equal to the client's count of {}.".format(response, len(message))
    else:
        print "Client:\n\tThe server returned count {} which is not equal to the client's count of {}.".format(response, len(message))
s.close()

输出:

Running client in UDP mode...
Running server in UDP mode...

Client:
    Sending message "Pointless text." to the server...
    It has a length of 15
Server:
    Message "Pointless text." received...
    It has a length of 15

客户端recvfrom永远不会触发,我也不知道为什么。

如果您想像这样直接在计算机上对其进行测试,则以下是完整的客户端服务器文件:

python2.7 server udp & python2.7 client udp

在服务器代码中,您正在将结果发送到服务器的地址( 9999 ),而不是客户端的地址( ip )。

尝试这个:

s.sendto(str(len(message)), ip) # send message length in bytes back to client

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM