我有一个TCP服务器,我需要用Python编写一个客户端。
服务器是一个使用arduino_uip库的arduino;服务器代码(几乎)与TCP server example of that library相同。使用nc作为客户机很好。
但是当我使用python sockets(如this answer)与服务器通信时,服务器会在套接字关闭或关闭时挂起。
这可能是服务器的问题;但是,由于nc作为客户端运行良好,我的问题是:
与nc相比,this answer有什么不同之处可以解释服务器在连接关闭/关闭时挂起的原因?
总结哪些有效哪些无效:
以下是客户端代码:
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之前有一个手动延迟)。我想我现在得去查查阿杜诺图书馆了。。。
查看了netcat源代码(svn checkout svn://svn.code.sf.net/p/netcat/code/trunk netcat code),它只在关闭之前调用shutdown(),而不是在设置套接字之后
这就是我所看到的区别
相关问题 更多 >
编程相关推荐