Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # //////////////////////////////////////////
- # Author: Marcin Radaszewski
- # Contact email: mradaszewski92@gmail.com
- # //////////////////////////////////////////
- import threading
- import socket
- from datetime import datetime
- class MainServer():
- def __init__(self, server_ip="0.0.0.0", server_port=5555):
- self.ip = server_ip
- self.port = server_port
- def run_server(self):
- """That function is "heart" of a server, sets address ip,port and starts listening"""
- # SET SERVER OPTIONS SUCH AS: TYPE IP, SORT PROTOCOL TO SEND DATA
- # BINDING IP,PORT ,THEN START LISTENING
- self.serwer_options = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
- self.serwer_options.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) # musi być prze bind()
- self.serwer_options.bind((self.ip, self.port))
- print("[*]Server has been listening: [{}:{}]".format("0.0.0.0", self.port))
- self.serwer_options.listen(5)
- def accept_all_connection(self):
- """ Accept all incoming connection from client, and return pair:
- client socket and client addres ip witch are use letter to write data in archives"""
- self.client_socket, self.client_addres = self.serwer_options.accept()
- return self.client_socket, self.client_addres
- def send_data(self, send_to, data_to_send):
- """That function send data on Client socket, 1st argument it's client socket from accept connection method,
- 2nd argument it data for client """
- send_to.send(data_to_send.encode('utf-8'))
- def recv_data(self, client_data):
- """"Function is responsibility for receiving data"""
- # RECEIVE DATA FROM CLIENT AND ASSIGN TO VARIABLE
- recived_data = client_data.recv(2048)
- # CHECK IF RRECIVED ARE NOT EMPTY THEN SAVE ALL TO ARCHIVE, DATA HAVE OWN FORMAT: [IP:PORT]->DATA
- if len(recived_data) > 0:
- data_to_save = "[{}:{}]".format(self.client_addres[0],self.client_addres[1])+"-> "+str(recived_data)+"-> [{}:{}]".format(self.ip, self.port)
- #self.save_data_to_archiv(data_to_save)
- # RETURN RECEIVED DATA AS TYPE-BYTE
- return recived_data
- else:
- # IF SOMETHING GO WRONG , DO NOTHING AND RETURN None VALUE
- print("[*]wrong data")
- return None
- def create_table_user(self, client_ip, client_port):
- """Method create table users"""
- self.user_table = []
- if len(self.user_table) == 0:
- self.user_table.append((client_ip, client_port))
- elif len(self.user_table) > 0:
- pair_addres_ip_port = (client_ip, client_port)
- for i in range(0, len(self.user_table)):
- if pair_addres_ip_port == self.user_table[i]:
- print("Address was added")
- elif pair_addres_ip_port != self.user_table[i]:
- self.user_table.append(pair_addres_ip_port)
- return self.user_table
- @staticmethod
- def show_info(ip, port):
- """Method show general information about client address - IP, PORT NUMBER"""
- # DISPLAY GENERAL INFORMATION ABOUT CLIENT ADDRESS
- line_separator = "------------------------------------------------------------------"
- print(line_separator)
- print("[*]Adres klienta: [{}:{}]".format(ip, port))
- print(line_separator)
- print("[*]Client ip:")
- print(line_separator)
- # for i in range(0,len(self.user_table)):
- # print(i+1, "[{}:{}]".format(self.user_table[i][0], self.user_table[i][1]))
- print("[*]Waiting")
- # @staticmethod
- # def user_menu_display_on_std_out():
- # dsp_menu = """
- # [1]-Show active user
- # [2]-Enter to chat room
- # [3]-Logout/close connection
- # """
- # return dsp_menu
- # def socket_makefile_method(self):
- #
- # self.serwer_options.makefile("r", newline="\n")
- #----------------------------------------------------------------------------
- headers = """HTTP/1.1 200 OK
- Date: Wed, 04 Jun 2014 20:35:29 GMT
- Server: Apache/2.2.17 (Unix)
- Set-Cookie: PHPSESSID=dc09f975147aa6011cac3177c1646625; path=/
- Expires: Thu, 19 Nov 1981 08:52:00 GMT
- Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
- Pragma: no-cache
- Content-Length: {}
- Keep-Alive: timeout=5, max=100
- Connection: Keep-Alive
- Content-Type: text/html
- """
- html = """<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
- <html>
- <head>
- <title>Welcome to Python.com</title>
- </head>
- <body>
- <h1><center>Hello Server</center></h1>
- </body>
- </html>"""
- # CREATE INSTANCE AND RUN SERVER
- test = MainServer("0.0.0.0", 4567)
- test.run_server()
- try:
- while True:
- client_socket, client_address = test.accept_all_connection()
- date_to_write = test.recv_data(client_socket)
- print(date_to_write.decode('utf-8'))
- test.show_info(client_address[0], client_address[1])
- size = len(html)
- content = headers.format(size) + html
- test.send_data(client_socket, content)
- except KeyboardInterrupt:
- print('KeyboardInterrupt')
- test.serwer_options.close()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement