#!/usr/bin/python import threading import socket #import the stuff we need from socket import * class SockClient(object): def __init__(self, host, port): self.host = host self.port = port self.addr = (self.host, self.port) sock = None for res in getaddrinfo(self.host, self.port, AF_UNSPEC, SOCK_STREAM): af, socktype, proto, canonname, sa = res try: sock = socket(af, socktype, proto) except error, msg: sock = None continue try: sock.connect(sa) #the same as our old client except error, msg: sock.close() sock = None continue break if sock is None: raise RuntimeError, "could not connect socket" self.sock = sock def remotemsg(self,msg): self.sock.send(msg) del msg def close(self): self.sock.shutdown(SHUT_RDWR) self.sock.close() class SockServer(threading.Thread): def __init__(self, port): self.port = port threading.Thread.__init__(self) def run(self): self.host = '' self.addr = (self.host, self.port) self.buf = 1024 sock = None for res in getaddrinfo(self.host, self.port, AF_UNSPEC, SOCK_STREAM, 0, AI_PASSIVE): af, socktype, proto, canonname, sa = res try: sock = socket(af, socktype, proto) except error, msg: sock = None continue try: sock.bind(sa) #the same as our old server, but implemented as a thread sock.listen(1) except error, msg: sock.close() sock = None continue break if sock is None: raise RuntimeError, "could not open socket" self.sock,addr = sock.accept() self.mainloop() def mainloop(self): while 1: data = self.sock.recv(self.buf) if not data: print "Remote user has terminated the session." break else: print 'remote_user:',data print "message?:" del data self.close() def close(self): self.sock.shutdown(SHUT_RDWR) self.sock.close() send_ip = raw_input('What is other ip?') send_port = input('What is other port?') open_port = input('What is your open port?') #finally a system for managing input and output SockServer(open_port).start() fake = raw_input('Press return when you both have this message.') insock = SockClient(send_ip, send_port) while 1: print 'Message?:' msg = raw_input() if msg: insock.remotemsg(msg)