python等价于n

2024-04-30 16:54:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个TCP服务器,我需要用Python编写一个客户端。

服务器是一个使用arduino_uip库的arduino;服务器代码(几乎)与TCP server example of that library相同。使用nc作为客户机很好。

但是当我使用python sockets(如this answer)与服务器通信时,服务器会在套接字关闭或关闭时挂起。

这可能是服务器的问题;但是,由于nc作为客户端运行良好,我的问题是:

与nc相比,this answer有什么不同之处可以解释服务器在连接关闭/关闭时挂起的原因?

总结哪些有效哪些无效:

  • python客户端&nc-l作为服务器:工作
  • nc作为客户端和arduino服务器:工作
  • python客户端&arduino服务器:挂起服务器

以下是客户端代码:

import socket

def netcat(hostname, port, content):
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect((hostname, port))
    s.sendall(content)
    s.shutdown(socket.SHUT_WR)
    while 1:
        data = s.recv(1024)
        if data == "":
            break
        print "Received:", repr(data)
    print "Connection closed."
    s.close()

编辑:

看来(沃斯普林的回答让我想到了!)这实际上是个时间问题。如果我在上面的代码中添加了sleep(0.5),那么一切都很好(就像在netcat中,在按下Ctrl+C之前有一个手动延迟)。我想我现在得去查查阿杜诺图书馆了。。。


Tags: 代码answer服务器客户端dataportsocketcontent
1条回答
网友
1楼 · 发布于 2024-04-30 16:54:56

查看了netcat源代码(svn checkout svn://svn.code.sf.net/p/netcat/code/trunk netcat code),它只在关闭之前调用shutdown(),而不是在设置套接字之后

这就是我所看到的区别

相关问题 更多 >