коля
Окт. 5, 2010 10:00:23
Здравствуйте!
К серверу подключены несколько клиентов. Эсть ли буффер для каждого клиента и его размер.
Alex2ndr
Окт. 5, 2010 12:02:34
коля
К серверу подключены несколько клиентов.
К какому серверу и каких клиентов? Сферических клиентов к сферическому серверу в вакууме? :)
Если вы говорите про самописный сервер, то от вас зависит есть там буфер или нет.
коля
Окт. 5, 2010 13:25:29
Alex2ndr
коля
К серверу подключены несколько клиентов.
К какому серверу и каких клиентов? Сферических клиентов к сферическому серверу в вакууме? :)
Если вы говорите про самописный сервер, то от вас зависит есть там буфер или нет.
UDP сервер + UDP клиенты, Win XP, Python 2.7
Использую socket модуле
# Define UDP server socket object
Server_Socket = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
# Enable address re-using
Server_Socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
# Set receiving buffer size
Server_Socket.setsockopt(socket.SOL_SOCKET, socket.SO_RCVBUFF, 32768)
# Bind server socket object to server IP address and port number
res = Server_Socket.bind((Server_IP_Address,Server_Port_Number))
# Set server socket in non-blocking mode
Server_Socket.setblocking(0)
Server_Socket.setsockopt(socket.SOL_SOCKET, socket.SO_RCVBUFF, 32768) для каждого клиента ли относится?
Андрей Светлов
Окт. 5, 2010 15:24:08
Что значит “для каждого клиента”?
Параметр относится к вашему серверному UDP сокету.
Не путайте с TCP, который делает по сокету на клиента в connect.
К тому же, надеюсь, вы понимаете - этот параметр устанавливает размер буфера и никак не относится к размеру UDP пакета. В общем - довольно бесполезная вещь.
коля
Окт. 6, 2010 09:25:36
Слово о буффере. Размер пакета - иное дело. У меня пакеты маленькие.
Дело в том, что читая буффер, получаю толко один пакет, хотя читаю реже, чем клиент высылает и должно быть не один, а больше.
Андрей Светлов
Окт. 6, 2010 15:40:37
Думаю, вы таки читаете не буфер а сокет. Буфер - скрытая штука.
В винде он по умолчанию 8K, на линуксе гораздо больше.
Неужели у вас 4 килобайтные UDP пакеты?
коля
Окт. 7, 2010 09:04:56
Андрей Светлов
Думаю, вы таки читаете не буфер а сокет. Буфер - скрытая штука.
В винде он по умолчанию 8K, на линуксе гораздо больше.
Неужели у вас 4 килобайтные UDP пакеты?
Уже писал, что пакеты маленькие. Буффер увеличил до 32к, а в пакеты всего GGA и RMC от GPS.
По моему, чтение с recv или recfrom читает именно буффер сокета. Выходит что нада читать как можно быстрее так как все клиенты пишут в одного и то же буффера, причем каждый новый запис стирает старого.
Или ошибаюсь???
В принципе ето связано с BSD, а не Питона.
sypper-pit
Окт. 7, 2010 18:04:30
ты во фряшке хочешь по UDP передавать данные, мне так и не ответили
http://python.su/forum/viewtopic.php?id=8658 на тему про icmp, хотя эта утилитка может передавать по UDP(при правильной настройке)
Андрей Светлов
Окт. 8, 2010 12:47:48
коля, наконец то понял что вы имеете в виду.
Да, естественно, все пакеты на UDP сокет попадают в один буфер.
Если их не выбирать оттуда, старые начнут пропадать, если им не хватит место. Буфер - циклический.
коля
Окт. 8, 2010 14:37:03
Спасибо Андрей!
Только у меня буффер 32к, покеты как сказал маленькие, а никак не могу добиться читать больше одного пакета сразу.
Выходит, что буффер только для одного пакета. В тредам начал разбиратся …
Может и плохо обьясняю. Русский не родной, учил его давно, а и не с кем пользовать. Извините …