#!/usr/bin/env python

__author__ = "bt3"


import socket
import threading

# Defining constants
# The IP address and port we want the server to listen on
BIND_IP = '0.0.0.0'
BIND_PORT = 9090


# Start a thread to handle client connection
def handle_client(client_socket):

    # Get data from client
    request = client_socket.recv(1024)
    print "[*] Received: " + request

    # Send back a packet
    client_socket.send('ACK')

    client_socket.close()



def tcp_server():

    # Create a socket object (just like the client)
    server = socket.socket( socket.AF_INET, socket.SOCK_STREAM)

    # Start listening
    server.bind(( BIND_IP, BIND_PORT))

    # the maximum backlog of connections is set to 5
    server.listen(5)
    print"[*] Listening on %s:%d" % (BIND_IP, BIND_PORT)

    # putting the server in the loop to wait for incoming connections
    while 1:

        # when a client connects, we receive the client socket (client variable)
        # the connections variables go to the addr variable
        client, addr = server.accept()
        print "[*] Accepted connection from: %s:%d" %(addr[0], addr[1])

        # create a thread object that points to our function
        client_handler = threading.Thread(target=handle_client, args=(client,))
        client_handler.start()



if __name__ == '__main__':
    tcp_server()