从iOS切换python布尔值
我遵循这个:教程 我把这些东西做得很好,作为一个完全不懂这一点的人,我一辈子都不知道如何将Python布尔值添加到教程中提到的“chatserver.py”文档中,粘贴在下面 我不仅想添加一个,还想用一个按钮在iPhone应用程序中切换它,然后请求从服务器返回 像, 用于切换布尔值(如何发送切换消息)以及如何询问服务器布尔值的状态的按钮 我为这个悬而未决的问题道歉 这是当前的服务器:(超级复杂,哇哦!)从iOS切换python布尔值,python,ios,objective-c,Python,Ios,Objective C,我遵循这个:教程 我把这些东西做得很好,作为一个完全不懂这一点的人,我一辈子都不知道如何将Python布尔值添加到教程中提到的“chatserver.py”文档中,粘贴在下面 我不仅想添加一个,还想用一个按钮在iPhone应用程序中切换它,然后请求从服务器返回 像, 用于切换布尔值(如何发送切换消息)以及如何询问服务器布尔值的状态的按钮 我为这个悬而未决的问题道歉 这是当前的服务器:(超级复杂,哇哦!) 首先,您必须决定是为每个连接指定一个单独的布尔值,还是为每个人指定一个共享值,或者是介于两者
首先,您必须决定是为每个连接指定一个单独的布尔值,还是为每个人指定一个共享值,或者是介于两者之间的某个值(例如,每个用户都有一个单独的值,在使用
iam
登录后可用)
我将为每个连接创建它,通过将其存储为协议
实例属性来实现。您可以通过将其作为模块全局或协议
类属性等存储在中来实现全局共享。如果您想要更奇特的东西,您将需要某种全局/类/etc.映射
def connectionMade(self):
#self.transport.write("""connected""")
self.factory.clients.append(self)
print "clients are ", self.factory.clients
self.boolean_flag = False
def dataReceived(self, data):
...
if command == "iam":
self.name = content
msg = self.name + " has joined"
elif command = "set":
self.boolean_flag = True
msg = self.name + " has set his flag"
elif command = "clear":
self.boolean_flag = False
msg = self.name + " has cleared his flag"
elif command = "get":
self.message("Your flag is {}\n".format(self.boolean_flag))
msg = self.name + " has checked his flag"
...
就这些
然而,值得注意的是,您的代码一开始根本无法工作 您已经创建了一个通用的
internet.protocol
。这意味着您的dataReceived
会在任何时候收到一些字节时被调用。这些字节可以是半条消息,也可以是半条消息。所以,我可能会给你发“iam:abarnert”
,然后发“msg:hello”
,但你会看到,比如说,“ia”
,然后是“m:abarnertmsg:h”
,然后是“ello”
最糟糕的是,当您在一台计算机上或在某些类型的LAN上测试所有这些时,实际上似乎工作正常,一方的每个发送接收与另一方的接收完全相同。但一旦你把它放到互联网上,它就会完全失败
这就是为什么Twisted附带了一系列稍高级别的协议,例如,换行符分离协议、NetString协议或任何您想要的协议。但是,如果您只使用最低级别的原始互联网协议,您必须自己处理缓冲和定界以及所有这些事情。这是您不想做的。首先,您必须决定是为每个连接指定一个单独的布尔值,还是为每个人指定一个共享值,或者是介于两者之间的某个值(例如,每个用户都有一个单独的值,在使用
iam
登录后可用)
我将为每个连接创建它,通过将其存储为协议
实例属性来实现。您可以通过将其作为模块全局或协议
类属性等存储在中来实现全局共享。如果您想要更奇特的东西,您将需要某种全局/类/etc.映射
def connectionMade(self):
#self.transport.write("""connected""")
self.factory.clients.append(self)
print "clients are ", self.factory.clients
self.boolean_flag = False
def dataReceived(self, data):
...
if command == "iam":
self.name = content
msg = self.name + " has joined"
elif command = "set":
self.boolean_flag = True
msg = self.name + " has set his flag"
elif command = "clear":
self.boolean_flag = False
msg = self.name + " has cleared his flag"
elif command = "get":
self.message("Your flag is {}\n".format(self.boolean_flag))
msg = self.name + " has checked his flag"
...
就这些
然而,值得注意的是,您的代码一开始根本无法工作 您已经创建了一个通用的
internet.protocol
。这意味着您的dataReceived
会在任何时候收到一些字节时被调用。这些字节可以是半条消息,也可以是半条消息。所以,我可能会给你发“iam:abarnert”
,然后发“msg:hello”
,但你会看到,比如说,“ia”
,然后是“m:abarnertmsg:h”
,然后是“ello”
最糟糕的是,当您在一台计算机上或在某些类型的LAN上测试所有这些时,实际上似乎工作正常,一方的每个发送接收与另一方的接收完全相同。但一旦你把它放到互联网上,它就会完全失败
这就是为什么Twisted附带了一系列稍高级别的协议,例如,换行符分离协议、NetString协议或任何您想要的协议。但是,如果您只使用最低级别的原始互联网协议,您必须自己处理缓冲和定界以及所有这些事情。您不想这样做。您是在为每个连接寻找一个单独的布尔值,还是为每个客户端寻找一个单独的布尔值(以某种更大的方式定义,例如从
iam
命令中定义的name
),还是由所有用户共享的布尔值?此外,这个问题的哪一部分在所有iOS特定的或与ObjC相关,除了聊天协议名为IphoneChat?@abarnert之外,我想说的是,因为我正在使用的教程是针对iphone的。如果你真的认为它与Objective-C相关,为什么你不发布任何Objective-C代码?您链接到的教程甚至显示了在您编写任何iOS代码之前如何使用telnet
测试此服务器。如果你能做到这一点,它就不是特定于iOS的。@abarnert它不是iOS-spesific-但是由于链接教程是针对iphone的,并且脚本处理的数据就是为了这个目的而做的,我觉得这是一个合适的标记。你是在为每个连接寻找一个单独的布尔值,还是为每个客户端寻找一个布尔值(以更大的方式定义,例如,来自iam
命令的name
),还是所有用户共享的?还有,除了聊天协议名为IphoneChat
,这个问题的哪一部分与iOS特定或ObjC相关?@abarnert我想说是的,因为我正在使用的教程是针对iphone的。如果你真的认为它与Objective-C相关,为什么不发布任何Objective-C代码您链接到的torial甚至显示了在您编写任何iOS代码之前如何使用telnet
测试此服务器。如果您能够做到这一点,它就不是特定于iOS的。@abarnert它不是iOS-spesific-但由于链接的教程是针对iphone的,并且脚本处理的数据是为此目的而编写的,我觉得这是一个合适的标记。对不起,我意识到我应该指定类型。只是一个随机布尔值,在教程中工作,切换。所以它可能就是这样