ФорумПрограммированиеPython → передача элементов списка и их отображение

передача элементов списка и их отображение

  • Mr.Pihto

    Сообщения: 1386 Репутация: N Группа: Адекваты

    Spritz 13 февраля 2011 г. 15:27

    короче написал клиент сервер приложение по принципу онлайн рисовалки фрозега… только тут я пытаюсь отображать во всех клиентах список юзеров.. все вродебы нормально… сервер при подключении нового клиента отдаёт ему список всех юзеров а старым клиентам добавляет в список нового только что подключившегося юзера.. проблема в том что при подключении 3го клиента список юзеров отображается не встолбик как надо а както криво.. короче вот
    как вы можете заметить первые 2 не выёбуются.. а с третего начинаеца барада



    сервер
    import socket, threading
    users = []
    socks = []
    class MyThread(threading.Thread):
    def __init__(self, sock, addr):
    self.sock = sock
    self.addr = addr
    threading.Thread.__init__(self)
    def run ( self ):
    print users
    for i in users:
    self.sock.send(str(i))
    for i in socks:
    if i!=self.sock:
    i.send(str(users[len(users)-1]))
    while 1:
    f = self.sock.recv(1024)
    for i in socks:
    i.send(f)
    self.sock.close()
    srv = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    srv.bind(("127.0.0.1", 7500))
    srv.listen(5)
    while 1:
    sock, addr = srv.accept()
    users.append(addr)
    socks.append(sock)
    MyThread(sock,addr).start()


    клиент
    import socket, threading
    from Tkinter import *

    class MyThread1(threading.Thread):
    def __init__(self, sock):
    self.sock = sock
    threading.Thread.__init__(self)
    def run (self):
    while 1:
    listbox.insert(END, self.sock.recv(1024))
    self.sock.close()

    master = Tk()

    listbox = Listbox(master)
    listbox.pack()

    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    sock.connect(("127.0.0.1",7500))
    MyThread1(sock).start()

    mainloop()
  • Mr.Pihto

    Сообщения: 1386 Репутация: N Группа: Адекваты

    Spritz 13 февраля 2011 г. 17:54, спустя 2 часа 26 минут 16 секунд

    все понял.. в сервере self.sock.send(str(i)) отправляет данные не зависимо от того принял клиен или нет.. и если клиент не успел то сервер лепит 2 ипа в 1 месадж
    Спустя 14 сек.
    time.sleep(1)

Пожалуйста, авторизуйтесь, чтобы написать комментарий!