Sure, just remember it works fine on a local network so im not sure that it is the server script but here. There are a few things that arn't completely tied up as im just testing things out but it basically works.
import socket, sys, threading
def parseIP(ip):
unparsedIP = ip
parsedIP = ''
parsedIP = unparsedIP.replace('(\'', '')
parsedIP = parsedIP.replace('\',', '')
parsedIP = parsedIP.replace(')', '')
x = parsedIP.find(' ')
parsedIP = parsedIP[:x]
return parsedIP
def msgclient(client):
address = myClients[client]
return address
class server(threading.Thread):
v = ''
vlock = threading.Lock()
id = 0
def __init__(self, clientSock):
threading.Thread.__init__(self)
self.myid = server.id
server.id += 1
self.myclientsock = clientSock
def run(self):
while 1:
k = self.myclientsock.recv(1000000)
if k == '/close': break
elif k == '/show':
msg = '\n'.join(myClientsNames)
self.myclientsock.send(msg)
elif k == '/terminate':
k = ''
server.v = ''
break
elif k[:5] == '/send':
t = k.lstrip('/send ')
q = t.find(' ')
myClientsSock[((t[:q+1]).rstrip(' ')).title()].send('HELLO')
print 'HELLO'
client.send('sent!')
else:
server.vlock.acquire()
server.v += k
server.vlock.release()
client.send(server.v)
myClientsNames.remove(myClients[self.myclientsock])
del myClientsSock[myClientsNames[myClients[self.myclientsock]]]
del myClientsIPs[myClientsNames[myClients[self.myclientsock]]]
self.myclientsock.close()
sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
sock.bind(('',4000))
sock.listen(5)
noClients = 5
mythreads = []
myClients = {}
myClientsIPs = {}
myClientsNames = []
myClientsSock = {}
for i in range(noClients):
(client, ap) = sock.accept()
uName = (client.recv(20)).title()
myClients[client] = uName
myClientsIPs[uName] = parseIP(str(ap))
myClientsNames.append(uName)
myClientsSock[uName] = client
newServer = server(client)
print ap
mythreads.append(newServer)
newServer.start()
sock.close()