Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env python
- import socket
- import struct
- import sys
- s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
- HOST = sys.argv.pop() if len(sys.argv) == 3 else '127.0.0.1'
- PORT = 1060
- format = struct.Struct('!I')
- length = 4000
- def recvall(sock, length):
- data = ''
- while len(data) < length:
- more = sock.recv(length - len(data))
- if not more:
- raise EOFError('socket closed %d bytes into a %d-byte message'
- % (len(data), length))
- data += more
- return data
- def get(sock):
- lendata = recvall(sock, format.size)
- (length,) = format.unpack(lendata)
- return recvall(sock, length)
- def put(sock, message):
- sock.send(format.pack(len(message)) + message)
- if sys.argv[1:] == ['server']:
- s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
- s.bind((HOST, PORT))
- s.listen(1)
- print 'Listening at', s.getsockname()
- sc, sockname = s.accept()
- print 'Accepted connection from', sockname
- sc.shutdown(socket.SHUT_WR)
- while True:
- message = get(sc)
- if not message:
- break
- print 'Message says:', repr(message)
- sc.close()
- s.close()
- elif sys.argv[1:] == ['client']:
- s.connect((HOST, PORT))
- s.shutdown(socket.SHUT_RD)
- put(s, 'Beautiful is better than ugly.')
- put(s, 'Explicit is better than implicit.')
- put(s, 'Simple is better than complex.')
- put(s, '')
- s.close()
- else:
- print >>sys.stderr, 'usage: blocks.py server|client [host]'
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement