Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Network
  • » Велосипед не работает. или недопонимание сокетов [RSS Feed]

#1 Авг. 20, 2010 18:06:22

Alex_Kutsan
От:
Зарегистрирован: 2010-03-25
Сообщения: 150
Репутация: +  0  -
Профиль   Отправить e-mail  

Велосипед не работает. или недопонимание сокетов

А есть ли в сокетах функция передающяя и приниающяя что-то иное кроме строки, например кортеж или список, или былобы класно еслиб вообще фаил.



Отредактировано (Авг. 20, 2010 18:07:48)

Офлайн

#2 Авг. 20, 2010 18:54:41

Alex_Kutsan
От:
Зарегистрирован: 2010-03-25
Сообщения: 150
Репутация: +  0  -
Профиль   Отправить e-mail  

Велосипед не работает. или недопонимание сокетов

есть ещё вопрос, если например к серверуподключаются 2 пользователя. по 1 порту они подключится не могут, как только подключится 2 , первого немедленно вышвырнет. Поэтому я создал 2 порта. Но клиент то 1. Поэтому клиент содержис тписок портов( покачто только 2) к которым он будет пробовать подключатся. Но вот незадача, если порт занят, то клиент спокойно подключается и выкидывает прошлого клиента, и даже ничего по этому поводу не говорит. Как проверить Занят ли порт и если он занят перейти к проверке другого



Офлайн

#3 Авг. 20, 2010 19:41:34

Lexander
От:
Зарегистрирован: 2008-09-19
Сообщения: 1139
Репутация: +  33  -
Профиль   Отправить e-mail  

Велосипед не работает. или недопонимание сокетов

Alex_Kutsan
На уровне сокетов нет понятий строка, список, файл. Почитайте немного теории об OSI: http://ru.wikipedia.org/wiki/Сетевая_модель_OSI



Офлайн

#4 Авг. 20, 2010 19:45:33

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

Велосипед не работает. или недопонимание сокетов

Alex_Kutsan
есть ещё вопрос, если например к серверуподключаются 2 пользователя. по 1 порту они подключится не могут, как только подключится 2 , первого немедленно вышвырнет. Поэтому я создал 2 порта. Но клиент то 1. Поэтому клиент содержис тписок портов( покачто только 2) к которым он будет пробовать подключатся. Но вот незадача, если порт занят, то клиент спокойно подключается и выкидывает прошлого клиента, и даже ничего по этому поводу не говорит. Как проверить Занят ли порт и если он занят перейти к проверке другого
сервер создает соединение на одном порту и к нему могут подключаться куча клиентов одновременно, и они не выпинывают друг друга.
а у тя видимо в коде касяк, напиши “ srv.listen(10)”, и при подключении клиентов их нужно будет складывать в потоки либо в селекты, или делать сокеты асинхронными, для того что-б работать с клиентам одновременно.

на счет передачи кортежей и файлов, нужно сначала определиться с тем что хочешь сделать, потом выбирать технологию. глянь xmlRPC, твистед или ещё что-нить более высокоуровневое, копаться с сокетами нужно только для обучения либо написания специфичных/не стандартных вещей.

Офлайн

#5 Авг. 20, 2010 20:05:45

Alex_Kutsan
От:
Зарегистрирован: 2010-03-25
Сообщения: 150
Репутация: +  0  -
Профиль   Отправить e-mail  

Велосипед не работает. или недопонимание сокетов

АГА, спасибо, теперь ещё 1 нюанс, как узнать адрес того от кого пришло сообщение, т.к функция
recvfrom(1024) почемуто выдаёт:
(сообщение, None)



Офлайн

#6 Авг. 20, 2010 22:33:33

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

Велосипед не работает. или недопонимание сокетов

sock, addr = srv.accept() # ВТОРОЙ параметр

Офлайн

#7 Авг. 21, 2010 00:22:21

Alex_Kutsan
От:
Зарегистрирован: 2010-03-25
Сообщения: 150
Репутация: +  0  -
Профиль   Отправить e-mail  

Велосипед не работает. или недопонимание сокетов

Это при установке соединения, а если соединение уже давно установлено, и к серверу подключены много клиентов. Как узнать адрес того кто прислал мне что-то? ну или почму эта функция recvfrom() выдаёт None вместо адреса?



Офлайн

#8 Авг. 22, 2010 12:48:19

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

Велосипед не работает. или недопонимание сокетов

Alex_Kutsan
Это при установке соединения, а если соединение уже давно установлено, и к серверу подключены много клиентов. Как узнать адрес того кто прислал мне что-то? ну или почму эта функция recvfrom() выдаёт None вместо адреса?
сделай словарь и туда складывай { “сокет”:“адрес” }, получении данных recv() ты указываешь сокет, таким образом будешь знать адрес.
вроде есть ф-ия для получения адреса ток я её не помню, посмотри что есть в сокете dir(sock)

Офлайн

#9 Авг. 22, 2010 14:04:46

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Велосипед не работает. или недопонимание сокетов

recvfrom - для UDP.
Поможет .getpeername()
Но она на самом деле вам не нужна.
.accept(), как уже было указано, возвращает сокет для работы с подключившимся клиентом и адрес этого самого удаленного конца.
Все дальнейшее общение идет через этот новый сокет. Таким образом клиенты никогда не перепутаются.



Офлайн

  • Начало
  • » Network
  • » Велосипед не работает. или недопонимание сокетов[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version