diff --git a/Client/client.py b/Client/client.py index 824c371..23924ff 100644 --- a/Client/client.py +++ b/Client/client.py @@ -1,22 +1,22 @@ #!/usr/bin/env python -# (C) coded by Tabib Ghaith +# (C) coded by Tabib Ghaith import socket import threading from ClientInterface.graphique import * class Connect(threading.Thread): - + def __init__(self,sock): threading.Thread.__init__(self) # prepare the socket self.host = '127.0.0.1' - self.port = 5000 + self.port = 4141 self.sock = sock self.recvthread = threading.Thread(target=self.recv_data) def run(self): # let's begin ! Buffer.append("Connected To server "+str(self.host)+"\n-------------------------------------------") # start a receving thread - + self.recvthread.start() self.recvthread.join() def send(self,msg): @@ -26,7 +26,7 @@ def recv_data(self): while True: # ready to receives msg = self.sock.recv(1028) - if len(msg) == 0 : + if len(msg) == 0 : Buffer.append("\nConncetion lost") break Buffer.append("\n"+str(msg)) @@ -35,14 +35,14 @@ def stoping(self): self.sock.shutdown(socket.SHUT_WR) def conn(username): sock = socket.socket()# standard TCP protocole - - if sock.connect_ex(('127.0.0.1',5000)) == 0 : + + if sock.connect_ex(('127.0.0.1',4141)) == 0 : sock.send(username) return [True , sock ] else : sock.close() return [False , -1] - + def Main(): global Buffer Buffer = [] @@ -50,13 +50,13 @@ def Main(): login = log(conn) login.loop() MainSocket = login.sock - # - if MainSocket is not None : + # + if MainSocket is not None : user = Connect(MainSocket) user.start() fen = app(Buffer,user.stoping,user.send) fen.loop() user.stoping() - + if __name__ == '__main__': - Main() + Main() diff --git a/Server/ClientThread/__init__.pyc b/Server/ClientThread/__init__.pyc deleted file mode 100644 index 6769098..0000000 Binary files a/Server/ClientThread/__init__.pyc and /dev/null differ diff --git a/Server/ClientThread/clth.pyc b/Server/ClientThread/clth.pyc deleted file mode 100644 index ec0d8ac..0000000 Binary files a/Server/ClientThread/clth.pyc and /dev/null differ diff --git a/Server/ClientThread/__init__.py b/Server/lib/ClientThread/__init__.py similarity index 100% rename from Server/ClientThread/__init__.py rename to Server/lib/ClientThread/__init__.py diff --git a/Server/ClientThread/clth.py b/Server/lib/ClientThread/clth.py similarity index 60% rename from Server/ClientThread/clth.py rename to Server/lib/ClientThread/clth.py index a9a4adf..e455344 100644 --- a/Server/ClientThread/clth.py +++ b/Server/lib/ClientThread/clth.py @@ -1,37 +1,36 @@ #!/usr/bin/env python -# (C) coded by Tabib Ghaith +# (C) coded by Tabib Ghaith import socket import threading class ClientThread(threading.Thread): - def __init__(self, ip, port, clientsocket,Buffer,user_list,listclient): + def __init__(self, ip, port, clientsocket, user_list, listclient): threading.Thread.__init__(self) self.ip = ip self.port = port self.clientsocket = clientsocket - self.Buffer = Buffer self.listclient = listclient - # get username + # get username self.user = self.clientsocket.recv(1024) - self.user_list = user_list + self.user_list = user_list self.user_list.append(self.user) - + def run(self): - self.Buffer.append( "\n[+] Connection from " +str(self.ip)+" : "+str(self.port)) + print '[+] Connection from ' + str(self.ip) + ' : ' + str(self.port) while True : # recv message from user data = '' data = self.clientsocket.recv(1028) # analysing data if len(data) == 0: - self.Buffer.append( "\n[-] "+str(self.user)+"("+str(self.ip)+str(self.port)+") deconnected") + print '[-] ' + str(self.user) + '( ' + str(self.ip) + str(self.port) + ' ) deconnected' self.listclient.remove(self.clientsocket) self.user_list.remove(self.user) self.clientsocket.close() break - self.Buffer.append("\n"+str(self.user)+" >> "+str(data)) - self.send_all(str(self.user)+" >> "+data) + print str(self.user) + ' >> ' + str(data) + self.send_all(str(self.user)+" >> "+data) def send_all(self,data): for client in self.listclient : if id(client) != id(self.clientsocket) : diff --git a/Server/ClientThread/clth.py~ b/Server/lib/ClientThread/clth.py~ similarity index 100% rename from Server/ClientThread/clth.py~ rename to Server/lib/ClientThread/clth.py~ diff --git a/Server/lib/__init__.py b/Server/lib/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/Server/lib/server.py b/Server/lib/server.py new file mode 100644 index 0000000..0f47b7f --- /dev/null +++ b/Server/lib/server.py @@ -0,0 +1,52 @@ +#!/usr/bin/python +# (C) coded by Tabib Ghaith + +import socket +import threading +import ClientThread.clth as cl + +#------------------------------------------------------------------------------------------------------# +class Server(object): + + def __init__(self, port=4141, user_list=[]): + self.user_list = user_list + # prepare the socket + self.port = port + self.sock = socket.socket()# standard TCP protocole + self.sock.bind(("",self.port)) + self.listclient = [] + + def start(self): + # let's begin ! + print '[.] Server Started !' + user_id = 0 + while True : + # waiting for client + self.sock.listen(10) + # accept him no password la walou (make a socket for him ) + (client, (ip,port)) =self.sock.accept() + # store the client socket so after we can closed in case of + self.listclient.append(client) + user_id = user_id + 1 + + # let the thread handel him so we can accept more + thread = cl.ClientThread(ip, port, client, self.user_list, self.listclient) + thread.start() + + def deconnectall(self): + # close all socket + for client in self.listclient : + client.shutdown(socket.SHUT_WR) + client.close() + + def release_listen(self): + # listening socket please stop + socket.socket().connect( ('127.0.0.1', self.port)) + self.deconnectall() + self.sock.close() + def stop(self): + global end + # in case button exit used + end = True + self.deconnectall() + self.release_listen() diff --git a/Server/server b/Server/server new file mode 100644 index 0000000..d4be277 --- /dev/null +++ b/Server/server @@ -0,0 +1,42 @@ +#!/usr/bin/python +# (C) coded by Tabib Ghaith + + +from lib.server import Server +import sys + +#------------------------ Help Funtion ------------------------# +def help(): + return """ + _ _ _____ _ ____ + | | | | ____| | | _ \* + | |_| | _| | | | |_) | + | _ | |___| |___| __/ + |_| |_|_____|_____|_| + """ + + +#------------------------ Main Function -----------------------# +def Main(): + if len(sys.argv) < 2: + print "python server: invalid arguments" + print "Try 'python server --help' for more information" + return 2 + elif sys.argv[1] == '--help': + print help() + return 0 + else : + try: + user_list = [] + # creating server object + server = Server(int(sys.argv[1]), user_list) + # starting server + server.start() + # stop listening and close connections1 + server.stop() + except Exception as e: + print '[!] ' + str(e) + + +if __name__ == '__main__': + Main() diff --git a/Server/server.py b/Server/server.py deleted file mode 100644 index f96d5a5..0000000 --- a/Server/server.py +++ /dev/null @@ -1,80 +0,0 @@ -#!/usr/bin/python -# (C) coded by Tabib Ghaith - -import socket -import threading -import serverinterface.graphique -import ClientThread.clth -#-------------------Global Vars-----------------------------------------------------------------------# -end = False -Buffer = [] -user_list = [] - -#------------------------------------------------------------------------------------------------------# - -class ServingClient(threading.Thread): - - def __init__(self): - threading.Thread.__init__(self) - # prepare the socket - self.port = 5000 - self.sock = socket.socket()# standard TCP protocole - self.sock.bind(("",self.port)) - self.listclient = [] - - def run(self): - global end - # let's begin ! - Buffer.append("server started \n-------------------------------------------") - user_id = 0 - while True : - # waiting for client - self.sock.listen(10) - # accept him no password la walou (make a socket for him ) - (client, (ip,port)) =self.sock.accept() - # store the client socket so after we can closed in case of - self.listclient.append(client) - user_id = user_id + 1 - if end : break - # let the thread handel him so we can accept more - thread = ClientThread.clth.ClientThread(ip,port,client,Buffer,user_list,self.listclient) - thread.start() - - def deconnectall(self): - # close all socket - for client in self.listclient : - client.shutdown(socket.SHUT_WR) - client.close() - - def release_listen(self): - # listening socket please stop - socket.socket().connect( ('127.0.0.1',5000)) - self.deconnectall() - self.sock.close() - def stoping(self): - global end - # in case button exit used - end = True - self.deconnectall() - self.release_listen() - -#------------------------ the main -----------------------# -def Main(): - - - # creating the server socket thread - mainthread = ServingClient() - # creating the app - Myapp = serverinterface.graphique.app(Buffer,user_list,mainthread.stoping) - mainthread.start() - - # looping our window - Myapp.loop() - - - # do a looping (bouclage 127.0.0.1) to release the listening in case of the user press x (not exit button) - mainthread.stoping() - mainthread.join() -if __name__ == '__main__': - Main() - diff --git a/Server/serverinterface/__init__.py b/Server/serverinterface/__init__.py deleted file mode 100644 index 8d1c8b6..0000000 --- a/Server/serverinterface/__init__.py +++ /dev/null @@ -1 +0,0 @@ - diff --git a/Server/serverinterface/__init__.pyc b/Server/serverinterface/__init__.pyc deleted file mode 100644 index d357509..0000000 Binary files a/Server/serverinterface/__init__.pyc and /dev/null differ diff --git a/Server/serverinterface/graphique.py b/Server/serverinterface/graphique.py deleted file mode 100644 index 6725d4b..0000000 --- a/Server/serverinterface/graphique.py +++ /dev/null @@ -1,50 +0,0 @@ -#!/usr/bin/env python -# (C) coded by Tabib Ghaith - -from Tkinter import * -import ttk -import threading -import time -def add_user(user_name,myapp): - myapp.liste.insert(END, user_name) - -def stop(stoping): - # Stop the mainthread - stoping() - # wait until all the threads are over max 1s - time.sleep(1) - exit(0) -def data_update(Buffer,console,user_list,liste,stoping): - # empty the buffer into the console text (refresh every 0.5ms) - if Buffer != [] : - console.config(state=NORMAL) - console.insert('end',Buffer[0]) - console.config(state=DISABLED) - del Buffer[0] - # update user list - liste.delete(0, END) - for user in user_list : - liste.insert(END, user) - console.after(500, data_update,Buffer,console,user_list,liste,stoping) -class app(object): - def __init__(self,Buffer,user_list,stoping): - # creating out main window (root) - self.root = Tk() - self.root.title('Server') - # creating the console and scrollbar - self.console = Text(self.root,width=50,height=20,wrap='word',state=DISABLED,bg="white") - self.console.grid(row = 0 , column=0,padx=1,pady=1) - self.scrollbar = ttk.Scrollbar(self.root,orient = VERTICAL ,command=self.console.yview) - self.scrollbar.grid(row = 0 , column=1,sticky ='ns') - self.console.config(yscrollcommand = self.scrollbar.set) - # user list - self.liste = Listbox(self.root,bg="white") - self.liste.grid(row = 0 , column=2,columnspan=2,sticky=W+E+N+S,) - # button start server and exit - self.button1 = ttk.Button(self.root, text ='Start Server',command=lambda: data_update(Buffer,self.console,user_list,self.liste,stoping)) - self.button1.grid(row = 1 , column=2) - self.button2 = ttk.Button(self.root, text =' Exit ',command=lambda: stop(stoping)).grid(row = 1 , column=3) - - # keep the window opened - def loop(self): - self.root.mainloop() diff --git a/Server/serverinterface/graphique.pyc b/Server/serverinterface/graphique.pyc deleted file mode 100644 index fe2cb8b..0000000 Binary files a/Server/serverinterface/graphique.pyc and /dev/null differ diff --git a/Server/serverinterface/graphique.py~ b/Server/serverinterface/graphique.py~ deleted file mode 100644 index 0862f0f..0000000 --- a/Server/serverinterface/graphique.py~ +++ /dev/null @@ -1,51 +0,0 @@ -#!/usr/bin/env python -# (C) coded by Tabib Ghaith - -from Tkinter import * -import ttk -import threading -import time -import socket -def add_user(user_name,myapp): - myapp.liste.insert(END, user_name) - -def stop(stoping): - # Stop the mainthread - stoping() - # wait until all the threads are over max 1s - time.sleep(1) - exit(0) -def data_update(Buffer,console,user_list,liste,stoping): - # empty the buffer into the console text (refresh every 0.5ms) - if Buffer != [] : - console.config(state=NORMAL) - console.insert('end',Buffer[0]) - console.config(state=DISABLED) - del Buffer[0] - # update user list - liste.delete(0, END) - for user in user_list : - liste.insert(END, user) - console.after(500, data_update,Buffer,console,user_list,liste,stoping) -class app(object): - def __init__(self,Buffer,user_list,stoping): - # creating out main window (root) - self.root = Tk() - self.root.title('Server') - # creating the console and scrollbar - self.console = Text(self.root,width=50,height=20,wrap='word',state=DISABLED,bg="white") - self.console.grid(row = 0 , column=0,padx=1,pady=1) - self.scrollbar = ttk.Scrollbar(self.root,orient = VERTICAL ,command=self.console.yview) - self.scrollbar.grid(row = 0 , column=1,sticky ='ns') - self.console.config(yscrollcommand = self.scrollbar.set) - # user list - self.liste = Listbox(self.root,bg="white") - self.liste.grid(row = 0 , column=2,columnspan=2,sticky=W+E+N+S,) - # button start server and exit - self.button1 = ttk.Button(self.root, text ='Start Server',command=lambda: data_update(Buffer,self.console,user_list,self.liste,stoping)) - self.button1.grid(row = 1 , column=2) - self.button2 = ttk.Button(self.root, text =' Exit ',command=lambda: stop(stoping)).grid(row = 1 , column=3) - - # keep the window opened - def loop(self): - self.root.mainloop() diff --git a/Server/server~ b/Server/server~ deleted file mode 100644 index bf4e5c0..0000000 --- a/Server/server~ +++ /dev/null @@ -1,80 +0,0 @@ -#!/usr/bin/env python -# (C) coded by Tabib Ghaith - -import socket -import threading -import serverinterface.graphique -import ClientThread.clth -#-------------------Global Vars-----------------------------------------------------------------------# -end = False -Buffer = [] -user_list = [] - -#------------------------------------------------------------------------------------------------------# - -class ServingClient(threading.Thread): - - def __init__(self): - threading.Thread.__init__(self) - # prepare the socket - self.port = 5000 - self.sock = socket.socket()# standard TCP protocole - self.sock.bind(("",self.port)) - self.listclient = [] - - def run(self): - global end - # let's begin ! - Buffer.append("server started \n-------------------------------------------") - user_id = 0 - while True : - # waiting for client - self.sock.listen(10) - # accept him no password la walou (make a socket for him ) - (client, (ip,port)) =self.sock.accept() - # store the client socket so after we can closed in case of - self.listclient.append(client) - user_id = user_id + 1 - if end : break - # let the thread handel him so we can accept more - thread = ClientThread.clth.ClientThread(ip,port,client,Buffer,user_list,self.listclient) - thread.start() - - def deconnectall(self): - # close all socket - for client in self.listclient : - client.shutdown(socket.SHUT_WR) - client.close() - - def release_listen(self): - # listening socket please stop - socket.socket().connect( ('127.0.0.1',5000)) - self.deconnectall() - self.sock.close() - def stoping(self): - global end - # in case button exit used - end = True - self.deconnectall() - self.release_listen() - -#------------------------ the main -----------------------# -def Main(): - - - # creating the server socket thread - mainthread = ServingClient() - # creating the app - Myapp = serverinterface.graphique.app(Buffer,user_list,mainthread.stoping) - mainthread.start() - - # looping our window - Myapp.loop() - - - # do a looping (bouclage 127.0.0.1) to release the listening in case of the user press x (not exit button) - mainthread.stoping() - mainthread.join() -if __name__ == '__main__': - Main() -