Найти - Пользователи
Полная версия: Сервер-клиент посредник
Начало » Python для новичков » Сервер-клиент посредник
1 2 3 4 5
Lam
klient connect
select
start
1 1
error socket.error (32, 'Broken pipe')
select
start
любопытный результат, ничего вобщем то нового, сдается мне что какой то сок работает не коректо, очень медленная скорость выполнения, перед тем как появляются 1 1 проходит довольно не мало времени
Lam
И тоже странно почему сначало передача с сервера идет а не с клиента…
Lam
Хы щас поставил конект к s2 после того как присваиваю значение переменной conn результат тот же только уже нету socket.errog, возможно ошибка в не правильной постановке работы двух соков одновременно, а не в самой передаче данных?
ZZZ
Lam
P.S. к оформлению кода просьба не придираться, просто на теле оно так луче выглядит легче понимать…
Прости, но он не читаем. Выполни в интерпретаторе `import this` и почитай то, что он тере напешет… Только там тоже “букавы” есть… :-)

Мой вариант move тесно завязан с settimout и поэтому тебе не очень подходит. Попробуй вариант Shiza, но замени 1024 на 1.

Lam
И тоже странно почему сначало передача с сервера идет а не с клиента…
А не всё ли равно? Возможно просто протокол так устроен.
Lam
Да запарили я действительно неграмотный не будь т9 ваще бы фих че поняли)
Lam
ZZZ
Мой вариант move тесно завязан с settimout и поэтому тебе не очень подходит. Попробуй вариант Shiza, но замени 1024 на 1.
на сколько тесно? Дело в том что recv(b) она принимает строку данных длиной не более b(это я всё книжке своей верю) и вобщем чтоб тогда организовать правильную передачу, прием выглядит примерно так(код взят с какой то сылки найденой в гугле):
 
while 1:
i = s1.recv(1)
if not i: break
i2 +=i
но тут у меня такой трейсбек появляется что мне страшно становится, может конечно опять измена), а с твоим вариантом у меня хоть что то делает, другие способы передачи хуже работают…
ZZZ
Lam
уже нету socket.errog
Ошибка в последней букве.

Lam
на сколько тесно?
Офигительно тесно. :-)
Если i.recv(1) не может не может получить вожделенный байт (кстати, в одном байте восемь бит, а не четыре) на протяжении времени указанного в settimout, то генерируется исключение socket.error.
Вообще, можешь сделать setblocking(False)… Но тогда ты получишь нечто, что будет кушать весь процессор окончательно и бесповоротно. Как выход, можно поиграться с time.sleep, но тогда конструкция хорошо усложниться.

Lam
Да запарили я действительно неграмотный не будь т9 ваще бы фих че поняли)
И кому было бы хуже? :-)
Поговори с “мобильщиками” на счёт нормального инструментария, а то это и правда не очень в тему. Хотя бы правило четырёх отступов соблюдать надо.
ZZZ
О! Я знаю! Попробуй так:
...
while k<20:
list1 = [conn, s2]
s3, s4, s5 = select.select(list1, [], [])
if not s3:
time.sleep(0.1)
continue

print 'select'
...
Не забудь где-нить в начале модуль time импортировать! А то с тебя сранется…
shiza
ZZZ
насчет размера пакета - так в доке написано:
“For best match with hardware and network realities, the value of bufsize should be a relatively small power of 2, for example, 4096. ”

“Now if you think about that a bit, you'll come to realize a fundamental truth of sockets: messages must either be fixed length (yuck), or be delimited (shrug), or indicate how long they are (much better), or end by shutting down the connection. The choice is entirely yours, (but some ways are righter than others).”
igor.kaist
Может быть стоит посмотреть в сторону описания протокола icq? Может там что то проясниться?
P.S. 4 провела выставлять, набирая текст на смартфоне, не удобно, уж поверьте. И читать код с 4 пробелами тоже очень трудно :)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB