Ну, хорошо, вот что я имею в данный момент.
Сервер работает так:
import asyncore
import socket
clients = {}
class MainServerSocket(asyncore.dispatcher):
def __init__(self, port):
asyncore.dispatcher.__init__(self)
self.create_socket(socket.AF_INET, socket.SOCK_STREAM)
self.bind(('',port))
self.listen(5)
def handle_accept(self):
newSocket, address = self.accept( )
clients[address] = newSocket
print "Connected from", address
SecondaryServerSocket(newSocket)
class SecondaryServerSocket(asyncore.dispatcher_with_send):
def handle_read(self):
receivedData = self.recv(8192)
if receivedData:
every = clients.values()
for one in every:
one.send(receivedData+'\n')
else: self.close( )
def handle_close(self):
print "Disconnected from", self.getpeername( )
one = self.getpeername( )
del clients[one]
MainServerSocket(21567)
asyncore.loop( )
И клиент работает так:
from Tkinter import *
from socket import *
import thread
HOST = 'localhost'
PORT = 21567
BUFSIZE = 1024
ADDR = (HOST, PORT)
tcpCliSock = socket(AF_INET, SOCK_STREAM)
tcpCliSock.connect(ADDR)
class Application(Frame):
def __init__(self, master):
Frame.__init__(self, master)
self.grid()
self.create_widgets()
self.socket()
def callback(self, event):
message = self.entry_field.get()
tcpCliSock.send(message)
def create_widgets(self):
self.messaging_field = Text(self, width = 110, height = 20, wrap = WORD)
self.messaging_field.grid(row = 0, column = 0, columnspan = 2, sticky = W)
self.entry_field = Entry(self, width = 92)
self.entry_field.grid(row = 1, column = 0, sticky = W)
self.entry_field.bind('<Return>', self.callback)
def add(self, data):
self.messaging_field.insert(END, data)
def socket(self):
def loop0():
while 1:
data = tcpCliSock.recv(BUFSIZE)
if data: self.add(data)
thread.start_new_thread(loop0, ())
root = Tk()
root.title("Chat client")
root.geometry("550x260")
app = Application(root)
root.mainloop()
Теперь пришло время сделать код лучше и добавить некоторые функции.
Спасибо за вашу помощь, ребята!