Linux за българи: Форуми

Програмиране => Общ форум => Темата е започната от: nedy в Mar 02, 2006, 17:14



Титла: проблем с питон + сокети
Публикувано от: 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
оправи се.
много странно като рестнах компа всичко се оправи и вече може да включвам сървъра многократно на един порт.