我的使用socket的python脚本有问题。我想测试客户端是否使用正确的文件,而不是像telnet这样的其他工具。服务器:
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((HOST, PORT))
s.listen(1)
while 1:
conn, addr = s.accept()
data = conn.recv(1024)
if data == 'test':
print 'ok'
else:
print '!'
conn.close()
客户:
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(HOST, PORT)
s.send('test')
客户端发送'测试'到服务器以验证它是否是正确的文件。 但是在客户端没有发送任何内容的情况下(如果客户端使用其他方式连接),我无法测试conn.recv(1024)是否等于' test'因为脚本冻结,我需要等待客户端停止并且服务器解冻。 提前谢谢。
答案 0 :(得分:0)
您可以使用select
函数来限制服务器等待新客户端连接或来自客户端的传入数据的时间:
import socket
import select
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((HOST, PORT))
s.listen(1)
while 1:
# wait up to 60 seconds that a client connects
newClient,_,_ = select.select([s], [], [], 60)
if not (newClient):
# no client wanted to connect
print 'No new client in last 60 seconds!'
return
else:
# new connection
print 'New client!'
conn, addr = s.accept()
# wait up to 60 seconds that the client send data
readable,_,_ = select.select([conn], [], [], 60)
if (readable):
data = conn.recv(1024)
if data == 'test':
print 'ok'
else:
print 'client do not send test'
else:
print 'client send nothing'
# close connection
conn.close()
请参阅select
。