# TCP Socket client 
 
import socket
import time
import sys
import argparse

def main(remote_ip, port):
    host = ''
     
    # create socket
    print('# Creating socket')
    try:
        sk = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    except socket.error:
        print('Failed to create socket')
        sys.exit()
          
    print('# Getting remote IP address') 
    try:
        if remote_ip == None:
            remote_ip = socket.gethostbyname( host )
    except socket.gaierror:
        print('Hostname could not be resolved. Exiting')
        sys.exit()
     
    # Connect to remote server
    print('# Connecting to server, ' + host + ' (' + remote_ip + ':' + str(port) + ')')
    sk.connect((remote_ip , port))
     
    recvbuflen=1024
    recvbuf=[]
    msg=[]
    try:
        while True:
            request = raw_input("?")##NB Py 3:request = input("?")
            try:
                sk.sendall(request)##NB Py 3:sk.sendall(request.encode('utf-8'))
            except socket.error:
                print 'Send failed:Socket Error'
                sys.exit()
            recvbuf = sk.recv(recvbuflen)
            if len(recvbuf)>0:
                print('# Receive data from server')
                sys.stdout.write("[%d]%s\n" % (len(recvbuf), recvbuf))
                if recvbuf.upper()=='CLOSE':
                    sk.close()
                    del sk
                    sk = None
                    break

            else:
               break

    except:
        print "Unexpected error:", sys.exc_info()[0]
        raise
    finally:
        print 'bye!'
        if sk != None:
           sk.shutdown(socket.SHUT_RDWR) 
           time.sleep(1)
           sk.close()
           del sk
        sys.exit()


if __name__ == "__main__":
    parser = argparse.ArgumentParser()
    parser.add_argument("--ip", type=str, default="127.0.0.1",
                        help="Remote ip address")
    parser.add_argument("--port", type=int, default=6000,
                        help="Remote port number")

    args = parser.parse_args()
    main(args.ip, args.port)
