') 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" /> ') 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" />

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 为什么只执行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循环
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":