【问题标题】:socket recv not returning套接字接收不返回
【发布时间】:2016-06-04 08:07:22
【问题描述】:

我不明白为什么 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()

但从未达到“After recv”标签。为什么?你能帮助我吗?怎么了?

【问题讨论】:

    标签: python sockets


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2011-10-10
      • 1970-01-01
      • 1970-01-01
      • 2013-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-06
      相关资源
      最近更新 更多