Здесь курят мануал.

Добро пожаловать на Пыху!

Логин:
Пароль:
 

Нет прописки? Зарегистрируйся!

Новости

Пыха переехала на новый сервер, ура!

Краснодарское время: 25 Май, 2012, 10:57:36

Страниц: [1]
Печать
Автор Тема: передача элементов списка и их отображение  (Прочитано 736 раз)
0 Пользователей и 2 Гостей смотрят эту тему.
Mr.Pihto    ↓ 
13 Февраль, 2011, 03:27:55
НЕ ХУЕТА! ХУЕТА!
не выябывайся
Группа: Адекваты

Карма: 17
Сообщений: 1398
Сила слова: 1.22

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

 
сервер
Python
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()

клиент
Python
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    ↓ 
13 Февраль, 2011, 05:54:11 , спустя 2 часа 26 минут 16 секунд
НЕ ХУЕТА! ХУЕТА!
не выябывайся
Группа: Адекваты

Карма: 17
Сообщений: 1398
Сила слова: 1.22

все понял.. в сервере self.sock.send(str(i)) отправляет данные не зависимо от того принял клиен или нет.. и если клиент не успел то сервер лепит 2 ипа в 1 месадж
Спустя 14 секунд добавил
time.sleep(1)
Записан
Страниц: [1]
Печать
 

Перейти в:  

Этот топик скрыли: Sinkler