Python: Echo UDP Server
Jump to navigation
Jump to search
Script untuk Server
#!/usr/bin/env python """ A simple echo server that uses UDP """ import optparse import select import socket import sys # setup variables host = "" backlog = 5 size = 1024 # parse options parser = optparse.OptionParser(usage = "%prog [options]", version = "%prog 0.1") parser.add_option("-p", "--port", type="int",dest="port", metavar="PORT",default=0, help="port number for the server") parser.add_option("-d","--debug",action="store_true",dest="debug", default=False, help="print debugging information") (options, args) = parser.parse_args() port = options.port debugging = options.debug # create socket server = None try: server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) server.bind((host,port)) print server.getsockname() except socket.error, (code,message): if server: server.close() print "Could not open socket: " + message sys.exit(1) # loop through sockets input = [server,sys.stdin] running = True while running: inputready,outputready,exceptready = select.select(input,[],[]) for s in inputready: if s == server: # handle the server socket try: data,address = server.recvfrom(size) print data server.sendto(data,address) except: running = False elif s == sys.stdin: # handle standard input junk = sys.stdin.readline() running = False # close server socket server.close()
Script untuk Client
#!/usr/bin/env python """ An echo client that uses UDP. Entering a blank line will exit the client. """ import optparse import select import socket import sys # setup variables size = 1024 # parse options parser = optparse.OptionParser(usage = "%prog [options]", version = "%prog 0.1") parser.add_option("-p", "--port", type="int",dest="port", metavar="PORT",default=0, help="port number for the server") parser.add_option("-s", "--server", type="string", dest="host", metavar="SERVER",default=socket.gethostname(), help="host name for the server") parser.add_option("-d","--debug",action="store_true",dest="debug", default=False, help="print debugging information") (options, args) = parser.parse_args() host = options.host port = options.port debugging = options.debug # setup socket client = None try: client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) except socket.error, (code,message): if client: client.close() print "Could not open socket: " + message sys.exit(1) sys.stdout.write('%') sys.stdout.flush() # handle input input = [client,sys.stdin] running = True while running: inputready,outputready,exceptready = select.select(input,[],[]) for s in inputready: if s == client: try: data,address = client.recvfrom(size) except socket.error, (code,message): print "Error: socket broken: " + message break sys.stdout.write(data) sys.stdout.write('%') sys.stdout.flush() elif s == sys.stdin: line = sys.stdin.readline() if line == '\n': running = False try: client.sendto(line,(host,port)) except socket.error, (code,message): print "Error: socket broken: " + message break sys.stdout.write('%') sys.stdout.flush() # close socket s.close()