import socket
import time
import threading
from Queue import Queue
import gobject
import gtk
PORT = 45454
def server():
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
sock.bind(('', PORT))
sock.listen(1)
conn, addr = sock.accept()
while True:
data = conn.recv(1024)
if not data:
break
conn.send(data)
conn.close()
sock.close()
th = threading.Thread(target=server)
th.setDaemon(True)
th.start()
time.sleep(0.5) # waiting for the server to be ready
class Client(gobject.GObject, threading.Thread):
def __init__(self):
self.__gobject_init__()
threading.Thread.__init__(self)
self.setDaemon(True)
self.queue_send = Queue()
self.queue_recv = Queue()
def send(self, msg):
self.queue_send.put(msg)
def recv(self):
return self.queue_recv.get()
def run(self):
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect(('', PORT))
while True:
sock.send(self.queue_send.get())
self.queue_recv.put(sock.recv(1024))
self.emit("data_received")
sock.close()
gobject.type_register(Client)
gobject.signal_new("data_received", Client,
gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, ())
class PyApp(gtk.Window):
def __init__(self):
gtk.Window.__init__(self)
self.connect("destroy", gtk.main_quit)
self.set_size_request(500, 500)
self.label = gtk.Label("")
self.add(self.label)
self.show_all()
self.c = Client()
self.c.start()
self.c.connect("data_received", self.received_handler)
gobject.timeout_add(500, self.send_message)
def send_message(self):
self.c.send("unko unko unko unko unko unko")
gobject.timeout_add(500, self.send_message)
def received_handler(self, sender):
data = self.c.recv()
self.label.set_text(self.label.get_text() + '\n' + data)
gtk.gdk.threads_init()
PyApp()
gtk.main()