Python UDP客户端没有响应

Python UDP客户端没有响应,python,python-2.7,udpclient,Python,Python 2.7,Udpclient,python UDP客户端: root@kali-linux:~# python Python 2.7.14 (default, Sep 17 2017, 18:50:44) [GCC 7.2.0] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import socket >>> target_host = "127.0.0.1" &g

python UDP客户端:

root@kali-linux:~# python
Python 2.7.14 (default, Sep 17 2017, 18:50:44) 
[GCC 7.2.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import socket
>>> target_host = "127.0.0.1"
>>> target_port = 80
>>> client = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
>>> client.sendto("AAABBBCCC",(target_host,target_port))
9
>>> data, addr = client.recvfrom(4096)
        # to this line,no response
>>>print data   # waiting for imput
当我输入“data,addr=client.recvfrom(4096)”然后输入时,我等待了十分钟没有响应

但是,当我编写TCP客户端时,它可以工作。下面是代码:

root@kali-linux:~# python
Python 2.7.14 (default, Sep 17 2017, 18:55:37) 
[GCC 7.2.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>import socket
>>>target_host = "www.baidu.com"
>>>target_port = 80
>>>client = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
>>>client.connect((target_host,target_port))
>>>client.send("GET / HTTP/1.1\r\nHost: baidu.com\r\n\r\n")
35
>>>response = client.recv(4096)
>>>print response 
#output
HTTP/1.1 200 OK
Date: Thu, 16 Nov 2017 12:05:07 GMT
Content-Type: text/html
Content-Length: 14613
Last-Modified: Wed, 01 Nov 2017 03:00:00 GMT
Connection: Keep-Alive
Vary: Accept-Encoding

AND SO ON ..........
TCP客户端可以工作,UDP客户端不能工作,为什么


我该怎么办?

UDP端口和TCP端口是不同的实体。您可以在TCP端口80上运行TCP服务器,在UDP端口80上运行完全不同的服务器(例如NTP服务器,尽管它通常在UDP端口123上运行)

在第一个代码段中,您将向UDP端口80发送UDP数据包。很可能UDP端口80上没有侦听任何内容,因此该数据包被悄悄地丢弃

您line
data,addr=client.recvfrom(4096)
正在等待某人(不一定是您发送请求的服务器)向您发送另一个UDP数据包。由于UDP端口80上通常没有任何侦听,因此不会发生任何签名,并且
revcfrom
调用将永远等待。它工作正常。这是意料之中的

你可以做些什么来获得一些东西: 1.将UDP代码段的套接字绑定到端口2222(或任何可用端口),然后运行它。它将再次永远等待。 2.使用“target_port=2222”运行第二个实例(在不同的shell中)。现在,您应该在第一个实例上收到一个内容为“AAABBBCCC”的UDP数据包


在第二个代码段中,您使用的是TCP,您正在与TCP端口80(而不是UDP端口80)上的web服务器联系,该服务器会做出响应。正如您所看到的,这是正常工作的,但这只是因为TCP端口80上正在运行某些东西。

为什么您要尝试通过同一个套接字发送和接收?另外,请停止使用Python 2。@zmbq同一个套接字?我认为代码没有错误,当我使用相同的示例编程TCP客户端时,它可以工作。IMHO,您必须启动两个进程:侦听此端口(服务器)和将数据发送到端口(客户端)以成功传输数据。可能您有一些软件(80端口指向http服务器,如nginx或ApacheHTTPD)正在侦听80/TCP端口。检查如下:1)$telnet 127.0.0.180(应成功连接-您可能会看到带有httpd服务器提示的黑屏),2)$netstat-tulpan | grep80@lospejos我没有任何软件,我只是在交互控制台上工作,但当我用python编程TCP客户端时,它工作了,我可以发送数据和接收数据,请看我的问题。在提供的示例中,您连接到一个服务器www.baidu.com,该服务器的端口80上有服务器软件litening。如果您在TCP示例中尝试连接到端口80上的主机127.0.0.1,您将收到连接错误非常感谢您的详细回答,我知道。谢谢!如果你能接受这个答案,那就太棒了。:-)