S
Simon Pickles
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))
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))
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/
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))
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))
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/