Python 为什么只执行if语句中的某些行? 导入系统 进口稀土 导入SocketServer 从sys导入stdin 类MyTCPHandler(SocketServer.BaseRequestHandler): """ 我们服务器的RequestHandler类。 每个到服务器的连接都会实例化一次,并且必须 重写handle()方法以实现与 客户 """ def句柄(自身): 服务器\u msg=“输入名称:\n” sent=self.request.send(服务器消息); self.handle\u buffer=self.request.recv(1024).strip() server\u msg=“这是个好名字\n” self.request.send(服务器消息); 退出=0 退出”+b; sys.stdout.write('You>') sys.stdout.flush() server_msg=stdin.readline() 如果(服务器消息为“\quit”): 退出=1; 打印“测试打印1”; self.request.send(“客户端已决定关闭此连接。再见。”) self.request.close() 退出=1 打破 其他: self.request.send(服务器消息) 打印“等待客户端的响应…” 如果名称=“\uuuuu main\uuuuuuuu”: 主机,PORT=“localhost”,9004 #创建服务器,绑定到端口9004上的本地主机 server=SocketServer.TCPServer((主机,端口),MyTCPHandler) #激活服务器;这将一直运行,直到您 #用Ctrl-C中断程序 服务器。永远为您服务()
if循环Python 为什么只执行if语句中的某些行? 导入系统 进口稀土 导入SocketServer 从sys导入stdin 类MyTCPHandler(SocketServer.BaseRequestHandler): """ 我们服务器的RequestHandler类。 每个到服务器的连接都会实例化一次,并且必须 重写handle()方法以实现与 客户 """ def句柄(自身): 服务器\u msg=“输入名称:\n” sent=self.request.send(服务器消息); self.handle\u buffer=self.request.recv(1024).strip() server\u msg=“这是个好名字\n” self.request.send(服务器消息); 退出=0 退出”+b; sys.stdout.write('You>') sys.stdout.flush() server_msg=stdin.readline() 如果(服务器消息为“\quit”): 退出=1; 打印“测试打印1”; self.request.send(“客户端已决定关闭此连接。再见。”) self.request.close() 退出=1 打破 其他: self.request.send(服务器消息) 打印“等待客户端的响应…” 如果名称=“\uuuuu main\uuuuuuuu”: 主机,PORT=“localhost”,9004 #创建服务器,绑定到端口9004上的本地主机 server=SocketServer.TCPServer((主机,端口),MyTCPHandler) #激活服务器;这将一直运行,直到您 #用Ctrl-C中断程序 服务器。永远为您服务(),python,sockets,Python,Sockets,if循环if(server\u msg is“\quit”):应该首先打印“Test print 1”,然后将关闭消息发送到客户端程序,然后关闭套接字并中断while循环。相反,它根本不打印“Test print 1”,但它确实成功地发送了“客户端已决定关闭此连接。再见”消息(我应该说是服务器,而不是客户端)并关闭客户端的套接字,然后它继续循环,输入\quit时,命令行中的结果如下: 您>\quit 等待客户端的响应… 测试打印2 客户名称> 您> 因此,似乎\quit只会导致if语句中的两行执
if(server\u msg is“\quit”):
应该首先打印“Test print 1”,然后将关闭消息发送到客户端程序,然后关闭套接字并中断while循环。相反,它根本不打印“Test print 1”,但它确实成功地发送了“客户端已决定关闭此连接。再见”消息(我应该说是服务器,而不是客户端)并关闭客户端的套接字,然后它继续循环,输入\quit时,命令行中的结果如下:
您>\quit
等待客户端的响应…
测试打印2
客户名称>
您>
因此,似乎\quit只会导致if语句中的两行执行,而出于某种原因,else语句也会运行?这对我来说毫无意义。非常感谢您的帮助。您确定服务器收到了以下字符串-“客户端已决定关闭此连接。祝您好运。” if语句的问题是“is”比较,它比较两个变量是否指向同一个对象,而不是它们的值 按如下方式替换它:
import sys
import re
import SocketServer
from sys import stdin
class MyTCPHandler(SocketServer.BaseRequestHandler):
"""
The RequestHandler class for our server.
It is instantiated once per connection to the server, and must
override the handle() method to implement communication to the
client.
"""
def handle(self):
server_msg = "Enter name:\n"
sent = self.request.send(server_msg);
self.handle_buffer = self.request.recv(1024).strip()
server_msg = "That's a nice name\n"
self.request.send(server_msg);
quit = 0
while quit < 1:
print "Test Print 2"
# self.request is the TCP socket connected to the client
self.client_response = self.request.recv(500).strip()
self.handle_buffer.strip()
self.client_response.strip()
x = self.handle_buffer.split("\n", 1)
y = self.client_response.split("\n",1)
a = x[0]
b = y[0]
print a + "> " + b;
sys.stdout.write(' You> ')
sys.stdout.flush()
server_msg = stdin.readline()
if(server_msg is "\quit"):
quit = 1;
print "Test Print 1";
self.request.send("The client has decided to close this connection. Good day.")
self.request.close()
quit = 1
break;
else:
self.request.send(server_msg)
print "Awaiting response from client..."
if __name__ == "__main__":
HOST, PORT = "localhost", 9004
# Create the server, binding to localhost on port 9004
server = SocketServer.TCPServer((HOST, PORT), MyTCPHandler)
# Activate the server; this will keep running until you
# interrupt the program with Ctrl-C
server.serve_forever()
有关更多信息,请参阅此问题:您的缩进可能是错误的。此外,Python中结束语句的分号是毫无意义的。不要把你的代码弄得乱七八糟。在我的问题中,它被抄错了,但在实际的代码中,我用vim中的
:set list
检查了所有代码,它看起来是一样的。最令人困惑的是,“测试打印1”从未打印过。因此,请在此处修改格式。如果你不这样做,我们可能帮不了你。为什么这个答案被否定了?
if server_msg == "\quit":