I am trying to update a global variable AUTHEN which refers to the socket's inputstream.
In the run()
method, I am trying to modify the AUTHEN's value. However, it never changes when I actually run the program. I am sure my server is did send other message other than "something"
import threading
import sys
import time
import socket
import ssl
AUTHEN ="Something"
class timer(threading.Thread):
def __init__(self):
self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.ssl_sock = ssl.wrap_socket(self.sock, ssl_version=ssl.PROTOCOL_SSLv23)
self.ssl_sock.connect(('localhost',9991))
self.isrun = True
threading.Thread.__init__(self)
def send(self,str):
self.ssl_sock.send(str + "\n")
def run(self):
global AUTHEN
while self.isrun:
receive = self.ssl_sock.recv(1024)
AUTHEN = receive
print("recv ->" +AUTHEN)
self.sock.close()
self.ssl_sock.close()
def close(self):
self.isrun == False
def authentication(self,username,password):
global AUTHEN
print "Verifing identity"
self.ssl_sock.send("U&P"+"sprt"+username+"sprt"+password+'\n')
while (True):
print AUTHEN
if(AUTHEN == str("OK\r\n")):
return AUTHEN
else:
print "Please Try again"
break
def main():
client = timer()
client.start()
#LOG IN
while(True):
loginMessage = str(raw_input("Please enter username and password as following format: \n username%password \n"))
username = loginMessage.split("%")[0]
password = loginMessage.split("%")[1]
Result = client.authentication(username,password)
if(Result == str("OK\r\n")):
print "LOG IN SUCCESSFULLY"
print "Welcome:\n","Command to be used:\n","-a filename\n" "-c number\n", "-f filename\n","-h hostname:port\n","-n name\n","-u certificate\n","-v filename certificate\n","otherwise input will be treated as normal message"
break
if __name__=='__main__':
main()
Thank you.
You need to call main()
You need to Start() your thread in order to initialize Run() which will set your global variable. Your thread.start() is in your main() def.
import threading
class ThreadClass(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
def run(self):
global a
a = 'Test'
def main(self):
thread = ThreadClass()
thread.start()
a= 'funny'
print a
ThreadClass().main()
print a
>>>funny
>>>Test
尝试从代码中删除两个句子:
global AUTHEN;
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.