Y para terminar con el ejemplo de un esqueleto cliente-servidor en Python, el cliente:
#!/usr/bin/python #encoding:utf-8 try: import socket import optparse,sys except: print("Error running 'import optparse,socket,sys'. Maybe you have to install some python library :)") parser = optparse.OptionParser("usage%prog " + "-s <target server> -p <target port>") parser.add_option('-s', dest = 'server', type = 'string', help = 'Please, specify the target server '-s server'') parser.add_option('-p', dest = 'port', type = 'string', help = 'Please, specify the target port '-p port'') (options, args) = parser.parse_args() if (options.server == None): print '[-] You must specify a target server: -s server.' exit(0) if (options.port == None): print '[-] You must specify a target port: -p port' exit(0) server = options.server port = int(options.port) # Create a TCP/IP socket sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # Connect the socket to the port on the server given by the caller server_address = (server, port) print('connecting to %s port %s' % server_address) try: sock.connect(server_address) except socket.error , msg: print 'Connect failed. Error code: ' + str(msg[0]) + 'Error message: ' + msg[1] sys.exit() try: message="Speaking with server " print("sending %s" % message) sock.sendall(message) amount_received = 0 amount_expected = len(message) while amount_received < amount_expected: data = sock.recv(16) amount_received += len(data) print("received %s" % data) finally: sock.close()
Creo que el código se explica solo. Tras realizar una correcta conexión, el cliente intercambiará un mensaje con el servidor. En ese trozo es donde se debería implementar el protocolo de aplicación que necesitemos.
La ejecución del cliente en el servidor implementado en las imágenes
Referencias:
- Python para todos, de Raúl González Duque
- Entrada con la versión sencilla del servidor
- Entrada con la versión concurrente del servidor