socket recv没有返回

时间:2016-06-03 23:03:17

标签: python sockets

我无法理解为什么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;永远不会达到标签。为什么?你能帮助我吗?有什么问题?

1 个答案:

答案 0 :(得分:2)

您的代码通常是正确的,虽然buffer是内置类型,您应该避免将其用作变量名称(但如果您这样做,它仍然可以使用)。

在阻塞套接字(默认状态)上,recv将阻塞,直到有一些数据可供读取。确保另一个端点正在发送(并刷新到套接字)响应。

您可能会发现tcpdump或Wireshark对于查看实际传输的数据包非常有用。另外,我建议您使用nc或类似的通用TCP套接字工具来调试它。例如,nc -4 -l localhost PORT-4,因为您的AF_INET暗示IPv4。)