我在python中制作了一个侦听端口4444的小服务器,当我用telnet连接时,一切都很好,我可以发送消息,服务器正确显示消息。 我只有一个问题: 当我尝试“解析”telnet消息时,我无法正确执行此操作。 事实上如果输出==“截图”,我想如果我发送的消息是“截图”,服务器在控制台上打印一条消息。 这不起作用。 这是我的来源,我是Python和网络编程的新手。 提前致谢 **即使我使用==如果声明是相同的** Coogle
来源
import head
print("SockShot Server Starting\n")
sock=head.Server("localhost",4444)
print("Server STARTED")
while True:
sock.s.listen(1)
conn,addr=sock.s.accept()
print("Connessione stabilita con : {0}:{1} \n".format(addr[0],str(addr[1])))
conn.send("Benvenuto \n".encode())
sock.ricevi(conn)
HEAD.py
import socket
import sys
class Server:
server=""
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
def __init__(self,server,porta):
self.server=server
try:
self.s.bind((server,porta))
print("Server binding complete \n")
except:
print("Binding server incomplete")
sys.exit(2)
def ricevi(self,socket):
result=socket.recv(1024)
while len(result)>0:
try:
print(result.decode())
result=socket.recv(1024)
self._check(str(result.decode()))
except:
print("Connection CLOSED BY CLIENT \n")
break;
socket.close()
def _check(self,output):
if output is "screenshot":
print("Screenshot ESEGUITO \n")
else:
print(output)
答案 0 :(得分:4)
可能的问题之一是您在使用is
时使用==
来比较字符串:
if output == "screenshot":
==
用于进行«标准»比较(即值的相等),在大多数情况下你将使用的那个:
>>> 1 == 1
True
>>> [1, 2] == [1, 2]
True
is
用于检查两个变量是否指向同一个对象:
>>> [1, 2] is [1, 2]
False
>>> l1 = [1, 2]
>>> l2 = l2
>>> l1 is l2
True # Same object, if you update l1 you will also update l2
>>> l1[0] = 4
>>> l1, l2
([4, 2], [4, 2])
is
可能会产生误导,因为在某些情况下它等同于标准==
:
>>> 1 is 1
True
>>> a = 1
>>> b = 1
>>> a is b
True
>>> s = 'hello'
>>> s is 'hello'
True
>>> s = s.lower()
>>> s, s is 'hello'
('hello', False)
那么,这里发生了什么?
执行[1, 2]
时,它会创建一个值为1
和2
的新列表(新内存块),因此,如果您执行[1, 2]
两次,则会生成两个不同的列表已创建,每个都有唯一的内存位置,因此[1, 2] is [1, 2]
为False
。
但是,当您键入'hello'
时,您第一次分配内存,但是当再次键入'hello'
时,因为它是常量string
,它指向第一个({1}}为避免重复相同的内存块,所以s = 'hello' ; s is 'hello'
为True
。在lower
上调用s
后,您将创建一个新的内存块,即使此块包含与'hello'
相同的数据,它也不在同一地址,因此{{1是假的。