Advertisement
rfmonk

tcp_sixteen.py

Jan 24th, 2014
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.45 KB | None | 0 0
  1. #!/usr/bin/env python
  2. # from book foundations in python network prog
  3. # TCP client and Server that send and receive
  4. # 16 octets
  5. import socket
  6. import sys
  7.  
  8. s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  9.  
  10. HOST = sys.argv.pop() if len(sys.argv) == 3 else '127.0.0.1'
  11. PORT = 1060
  12.  
  13.  
  14. def recv_all(sock, length):
  15.     data = ''
  16.     while len(data) < length:
  17.         more = sock.recv(length - len(data))
  18.         if not more:
  19.             raise EOFError('socket closed % d bytes into a\
  20.                           %d-byte message' % (len(data), length))
  21.         data += more
  22.     return data
  23.  
  24. if sys.argv[1:] == ['server']:
  25.     s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
  26.     s.bind((HOST, PORT))
  27.     s.listen(1)
  28.     while True:
  29.         print 'Listening at', s.getsockname()
  30.         sc, sockname = s.accept()
  31.         print 'We have accepted a connection from', sockname
  32.         print 'Socket connects', sc.getsockname(), 'and',
  33.         sc.getpeername()
  34.         message = recv_all(sc, 16)
  35.         print 'The incomming sixteen-octet message says', repr(message)
  36.         sc.sendall('Farewell, client')
  37.         sc.close()
  38.         print 'Reply sent, socket closed'
  39.  
  40. elif sys.argv[1:] == ['client']:
  41.     s.connect((HOST, PORT))
  42.     print 'Client has been assigned socket name', s.getsockname()
  43.     s.sendall('Hi there server')
  44.     reply = recv_all(s, 16)
  45.     print 'The server said', repr(reply)
  46.     s.close()
  47.  
  48. else:
  49.     print >>sys.stderr, 'usage: tcp_local.py server|client [host]'
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement