Help a C++ escapee!

Simon Pickles sipickles at hotmail.com
Thu Jun 7 03:59:11 EDT 2007


Hi,

Can someone help me leave the murky c++ world and enter shiny pythonland?

I have a problem with importing and global variables, here's my code:

----------------------------------------
##server.py

#socket connections
from socketManager import*

network = CNetworkManager()
network.Listen()

--------------------------------------
##socketManager.py

from time import sleep
from socket import*

import threading


class CNetworkManager():
    def __init__(self):
        self.hostName = ""
        self.portNumber = 15500
        self.buffer = 500
        self.serverAddress = ( self.hostName, self.portNumber )
        self.maxClients = 2
        ## previous stuff to send to new client
        self.serverData = []

        self.serverSocket = socket ( AF_INET, SOCK_STREAM )
        self.serverSocket.bind ( self.serverAddress )
        print( "Socket started " )
        self.serverSocket.listen ( self.maxClients )
        print( "Server is waiting for a connection" )

    def Listen(self):
        self.threadArray =[]
        self.ch = 0
        while self.ch < self.maxClients:
            #Create a thread listening to each socket
            self.newThreadObject = CServerThread()
            self.newThreadObject.start()
            self. threadArray.append(self.newThreadObject)
            self.ch=self.ch+1



class CServerThread(threading.Thread):
    def run(self):
        while (1):
            self.clientSocket, self.clientAddress = network.accept()
            print("New Client:", self.clientAddress)
            if network.serverData:
                for i in range(len(network.serverData)):
                    clientSocket.send(str(network.serverData[i]))
                    sleep(0.01)
            else:
                clientSocket.send("You are logged in")
            print("Entering loop for client ", clientAddress )
            while 1:
                clientData = clientSocket.recv(Buffer)
                if not clientData:
                    print( clientAddress + " has closed the connection" )
                    break
                print( "%s says %s" % (clientAddress, clientData))
                clientData = clientData + "~~"
                network.serverData.append(clientData)
                for i in range(len(network.serverData)):
                    clientSocket.send(str(network.serverData[i]))
                    sleep(0.01)
                print("Ready to receive more data")

            clientData.close()
            break
        network.serverSocket.close()
--------------------------------------------------

When run, I come unstuck here:

            self.clientSocket, self.clientAddress = network.accept()

I get a nameError on 'network', yet it is one in the global namespace, 
defined in server.py before CServerThread.Listen() is called.

In c++, I understood how to declare variables, here I have a problem. Its 
like I need an extern statement from c++.

Can anyone clarify this for me?

Many thanks

Simon

_________________________________________________________________
Play your part in making history - Email Britain! 
http://www.emailbritain.co.uk/




More information about the Python-list mailing list