更新python服务器中的函数内部的变量

时间:2016-12-16 00:05:51

标签: python variables

所以我的问题是我正在制作这个服务器,我希望它能够通过向服务器发送's'来关闭服务器,但无论我尝试什么我都无法更新数据(如你所见)我已经尝试了返回和全局,但无法让它工作:(),它保持空白,我可以获得一个提示吗?真的是新的python所以如果可能的话让它很容易理解。

import socket
import sys
from _thread import * 
host = ''
port = 4444
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

try:
    s.bind((host, port))
except socket.error as e:
    print(str(e))

s.listen(1)
print('waiting for connetion')
def threaded_client(conn):
    conn.send(str.encode('welcome, type your data'))

    while True:
        global data
        data = conn.recv(2048)
        data = data.decode('utf-8')
        reply = 'server output: '+ data
        if not data:
            print('connetion lost')
            return data
            break
        conn.sendall(str.encode(reply))
    conn.close()


while True:
    global data
    data = ''
    conn, addr = s.accept()
    print('connected to: '+ addr[0]+ ':' +str(addr[1])) 
    start_new_thread(threaded_client, (conn,))
    print(data)
    if data == 's':
        print('shutting down server goodbye....')
        s.close()
        exit()

1 个答案:

答案 0 :(得分:0)

在第38行左右,将其更改为

while True:        
        if data and data.strip() == 's':
            print('shutting down server goodbye....')
            s.close()
            exit()

仍然可以对代码进行许多改进,但是如果检测到's',此更改将导致脚本退出。

在您的代码中,检查数据=='s'失败有两个原因:

  • 检查只运行一次,然后主线程空闲。通过循环,您可以在将来检查数据值。
  • 数据值实际为s\r\n,因此您必须修剪换行符