Найти - Пользователи
Полная версия: Велосипед не работает. или недопонимание сокетов
Начало » Network » Велосипед не работает. или недопонимание сокетов
1 2 3
Alex_Kutsan
А есть ли в сокетах функция передающяя и приниающяя что-то иное кроме строки, например кортеж или список, или былобы класно еслиб вообще фаил.
Alex_Kutsan
есть ещё вопрос, если например к серверуподключаются 2 пользователя. по 1 порту они подключится не могут, как только подключится 2 , первого немедленно вышвырнет. Поэтому я создал 2 порта. Но клиент то 1. Поэтому клиент содержис тписок портов( покачто только 2) к которым он будет пробовать подключатся. Но вот незадача, если порт занят, то клиент спокойно подключается и выкидывает прошлого клиента, и даже ничего по этому поводу не говорит. Как проверить Занят ли порт и если он занят перейти к проверке другого
Lexander
Alex_Kutsan
На уровне сокетов нет понятий строка, список, файл. Почитайте немного теории об OSI: http://ru.wikipedia.org/wiki/Сетевая_модель_OSI
o7412369815963
Alex_Kutsan
есть ещё вопрос, если например к серверуподключаются 2 пользователя. по 1 порту они подключится не могут, как только подключится 2 , первого немедленно вышвырнет. Поэтому я создал 2 порта. Но клиент то 1. Поэтому клиент содержис тписок портов( покачто только 2) к которым он будет пробовать подключатся. Но вот незадача, если порт занят, то клиент спокойно подключается и выкидывает прошлого клиента, и даже ничего по этому поводу не говорит. Как проверить Занят ли порт и если он занят перейти к проверке другого
сервер создает соединение на одном порту и к нему могут подключаться куча клиентов одновременно, и они не выпинывают друг друга.
а у тя видимо в коде касяк, напиши “ srv.listen(10)”, и при подключении клиентов их нужно будет складывать в потоки либо в селекты, или делать сокеты асинхронными, для того что-б работать с клиентам одновременно.

на счет передачи кортежей и файлов, нужно сначала определиться с тем что хочешь сделать, потом выбирать технологию. глянь xmlRPC, твистед или ещё что-нить более высокоуровневое, копаться с сокетами нужно только для обучения либо написания специфичных/не стандартных вещей.
Alex_Kutsan
АГА, спасибо, теперь ещё 1 нюанс, как узнать адрес того от кого пришло сообщение, т.к функция
recvfrom(1024) почемуто выдаёт:
(сообщение, None)
o7412369815963
sock, addr = srv.accept() # ВТОРОЙ параметр
Alex_Kutsan
Это при установке соединения, а если соединение уже давно установлено, и к серверу подключены много клиентов. Как узнать адрес того кто прислал мне что-то? ну или почму эта функция recvfrom() выдаёт None вместо адреса?
o7412369815963
Alex_Kutsan
Это при установке соединения, а если соединение уже давно установлено, и к серверу подключены много клиентов. Как узнать адрес того кто прислал мне что-то? ну или почму эта функция recvfrom() выдаёт None вместо адреса?
сделай словарь и туда складывай { “сокет”:“адрес” }, получении данных recv() ты указываешь сокет, таким образом будешь знать адрес.
вроде есть ф-ия для получения адреса ток я её не помню, посмотри что есть в сокете dir(sock)
Андрей Светлов
recvfrom - для UDP.
Поможет .getpeername()
Но она на самом деле вам не нужна.
.accept(), как уже было указано, возвращает сокет для работы с подключившимся клиентом и адрес этого самого удаленного конца.
Все дальнейшее общение идет через этот новый сокет. Таким образом клиенты никогда не перепутаются.
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