我无法理解为什么socket recv不会返回。我有一个客户端应用程序将字符串发送到服务器。客户端在终端中执行。这是代码
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print "Enter client sender"
try:
client.connect((target, port))
if len(buffer):
client.send(buffer)
while True:
print "Enter loop"
recv_len = 1
response = ""
while recv_len:
print "Enter loop 2"
data = client.recv(4096)
print "Afer recv"
recv_len = len(data)
print recv_len
response += data
if recv_len < 4096:
break
print response,
buffer = raw_input("")
buffer += "\n"
client.send(buffer)
except:
print "[*] Exception Exiting"
client.close()
但是&#34;经过recv&#34;永远不会达到标签。为什么?你能帮助我吗?有什么问题?
答案 0 :(得分:2)
您的代码通常是正确的,虽然buffer
是内置类型,您应该避免将其用作变量名称(但如果您这样做,它仍然可以使用)。
在阻塞套接字(默认状态)上,recv
将阻塞,直到有一些数据可供读取。确保另一个端点正在发送(并刷新到套接字)响应。
您可能会发现tcpdump
或Wireshark对于查看实际传输的数据包非常有用。另外,我建议您使用nc
或类似的通用TCP套接字工具来调试它。例如,nc -4 -l localhost PORT
(-4
,因为您的AF_INET
暗示IPv4。)