Thread: Sockets & IP's
View Single Post
Old Mar 23rd, 2008, 11:00 AM   #7
Freaky Chris
Hobbyist Programmer
 
Freaky Chris's Avatar
 
Join Date: Dec 2007
Location: England
Posts: 169
Rep Power: 1 Freaky Chris is on a distinguished road
Send a message via MSN to Freaky Chris
Re: Sockets & IP's

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()
Freaky Chris is offline   Reply With Quote