#!/usr/local/bin/python
# $Id: echo.python,v 1.7 2001/05/06 22:21:26 doug Exp $
# http://www.bagley.org/~doug/shootout/
# with help from Brad Knotwell
import sys, os
from socket import *
DATA = "Hello there sailor\n"
bufferSize = len(DATA)
def server_sock():
sock = socket(AF_INET, SOCK_STREAM)
sock.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
sock.bind(('127.0.0.1', 0));
sock.listen(2)
return(sock)
def get_port(sock):
host, port = sock.getsockname()
return(port)
def client_sock(port):
sock = socket(AF_INET, SOCK_STREAM)
sock.connect(('127.0.0.1', port))
return(sock)
def echo_client(n, port):
sock = client_sock(port)
sender,receiver = sock.send,sock.recv
for i in range(0,n):
sender(DATA)
ans = receiver(bufferSize)
while ans[-1] != "\n":
ans += receiver(bufferSize - len(ans))
if ans <> DATA:
raise("client: \"%s\" ne \"%s\"" % (DATA, ans))
sock.close()
def echo_server(n):
ssock = server_sock()
if os.fork() > 0:
# parent is server
csock, addr = ssock.accept()
n = 0
sender,receiver = csock.send,csock.recv
while 1:
dat = receiver(bufferSize)
if not dat: break
sender(dat)
n += len(dat)
print "server processed %d bytes" % n
os.wait()
else:
# child is client
echo_client(n, get_port(ssock))
def main():
n = int(sys.argv[1])
if n < 1:
n = 1
echo_server(n)
main()