我正在开发一个python客户端,它应该与C编程的服务器通信。现在它只是用“ok”回答一些已识别的命令(当我用netcat作为客户端测试时,服务器部分工作)。但是我的python客户端只有四次获得ok(并且其余时间为空行)。我不明白为什么因为套接字被设置为阻塞所以我认为它确实收到了一些但我不知道是什么。
这就是我所拥有的。 “info”只是一个存储有少量字符串的对象,循环之前的所有内容都有效,并且为了可读性而略微简化:我只是应该收到一条欢迎消息然后发送回连接播放器的团队名称然后收到一个位置。
try:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
except socket.error, msg:
print 'Failed to create socket. Error code: ' + str(msg[0]) + ' , Error message : ' + msg[1]
sys.exit();
try:
remote_ip = socket.gethostbyname(info.host)
except socket.gaierror:
print "Hostname could not be resolved. Exiting"
sys.exit()
s.setblocking(1)
s.settimeout(60)
s.connect((remote_ip, info.port))
data = s.recv(1024)
print data
team = info.team + "\n"
s.sendall(team)
data = s.recv(1024)
print data
while 42:
msg = raw_input('>> ')
s.sendall(msg + "\n")
data = s.recv(1024)
if data == "":
break
else:
print data
s.shutdown(socket.SHUT_WR)
s.close()
答案 0 :(得分:0)
在我看来,你确实收到了一些东西:使用ord()将数据转换为ascii以查看它。我的猜测是,在服务器发送给你的响应中,“ok”之前有3条不可打印的行。只需识别然后在新的循环中捕获它们。