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
当我输入“数据,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数据包发送到UDP端口80。很可能没有任何内容在UDP端口80上侦听,因此该数据包被静默丢弃。
您的行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 - Python UDP客户端未响应,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47326955/