#!/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)