Титла: проблем с питон + сокети
Публикувано от: nedy в Mar 02, 2006, 17:14
здравейте!!! значи правя си сървър като слагам Примерен код | self.sock.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
|
но след като спpа сървъра повече немога да го пусна на този порт. Ето целият сорс
Примерен код | #!/usr/bin/python import socket import threading
class Client(threading.Thread): def (self,server,conn): threading.Thread.(self) self.conn=conn self.server=server self.nick=None def run(self): while 1: data = self.conn.recv(1024) if data == '': print "Connection Failed..." break command = data[:3] text = data[4:-2] if command == 'reg': self.reg(text) elif command == 'lst': self.lst() elif command == 'msg': self.msg(text) else: self.error("Bad Syntax...") self.disconnect() def error(self,text): self.conn.send("error:"+text+'\n') def lst(self): l = self.server.lst() for n in l: self.conn.send(n+'\n') def reg(self,n): if self.nick: self.error("Already Registered...") else: self.nick=n status = self.server.reg(self) if not status: self.error("Nick Already In Use...") self.nick = None def msg(self,text): if not self.nick: self.error("You're Not Registered Yet...") else: self.server.msg(self,text) def disconnect(self): self.conn.close() self.server.unreg(self) class ChatServer: def (self,port): self.sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM) self.port = port self.sock.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1) self.sock.bind(("",self.port)) self.sock.listen(5) self.lock=threading.Lock() self.clients= {} def run(self): while 1: conn,addr = self.sock.accept() print addr cl = Client(self,conn) cl.start() def reg(self,client): self.lock.acquire() if self.clients.has_key(client.nick): self.lock.release() return None self.clients[client.nick] = client self.lock.release() return 1 def unreg(self,client): self.lock.acquire() del self.clients[client.nick] self.lock.release() def lst(self): l=[] self.lock.acquire() l.extend(self.clients.keys()) self.lock.release() return l def msg(self,client,text): self.lock.acquire() for cl in self.clients.values(): cl.conn.send('<'+client.nick+'>'+text+'\n') self.lock.release() server = ChatServer(50000) server.run()
|
Титла: проблем с питон + сокети
Публикувано от: i_danov в Mar 03, 2006, 17:50
а какво ти дава netstat -atp след като спреш сървъра? и по-конкретно редовете, в които се споменава порта, който ползваш.
Титла: проблем с питон + сокети
Публикувано от: nedy в Mar 03, 2006, 19:53
оправи се. много странно като рестнах компа всичко се оправи и вече може да включвам сървъра многократно на един порт.
|