2013-04-02 56 views
0

对于我的simple socket server,我需要一个名为serverloop(我试图提高我的函数技能)的函数。在此函数中,循环不断尝试连接潜在客户端:如何使用函数循环中定义的全局变量

def serverloop(s): 
    while True: 
     conn, addr = s.accept() 
     print "Connected with", addr 

但是,conn需要其他功能来运行:

def send_msg(conn): 
    #Send some data to the remote server 
    my_message = raw_input(">>>") 


    #set the whole string 
    conn.sendall(my_message) 

我试图强迫康恩是全球性的与线global conn,但我仍然收到错误:

NameError: global name 'conn' is not defined 

注意:我必须使用线程。

我怎么能说尽管它是一个函数中定义的conn变量?

+0

如何调用'send_msg'?从哪里来?它与“serverloop”有什么关系? –

+1

**您在哪里添加了“global conn”这一行? –

+0

@MartijnPieters我在不同的版本中添加了这个。为了复制这个问题,把'global conn'放在循环中,在accept线之上。 – xxmbabanexx

回答

1

您正在使用线程,conn通过调用RECEIVE的时间尚未确定

的解决将是要么不使用线程,或者至少设置connNone那么,如果它试图值传递给RECEIVE之前设置为不同的main东西查询。

+0

但是,我*必须使用线程*我在[创建GUI插座服务器(http://stackoverflow.com/问题/ 15754878/the-loop-gods-strike-again-how-to-keep-socket-connected-though-gui-mainloop),但我最近意识到问题是服务器,而不是GUI。 – xxmbabanexx

+0

@xxmbabanexx - 此外,你打电话RECEIVE与错误的参数数量(如果我正确地读你的代码)... – mgilson

+0

你可以请详细说明设置“连接到None然后轮询,如果它被设置为不同的东西在尝试将值传递给RECEIVE之前主?“?或者至少提供一个链接,以便我可以自己理解它。 – xxmbabanexx