Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 16, 2014 17:02:27

koluna
Зарегистрирован: 2014-07-08
Сообщения: 30
Репутация: +  0  -
Профиль   Отправить e-mail  

Работа с модулем socket

Всем привет!

Имеем сервер и клиент.
Сервер и клиент обмениваются простейшими сообщениями запрос-ответ, соединение используется очень непродолжительное время.
Надо ли и на сервере и на клиенте выполнять метод close() экземпляров сокета по окончании обмена?
Или это достаточно сделать только на одной стороне?
Если необходимо выполнять на обеих сторонах, то надо ли как-то синхронизировать между собою очередность вызова этих методов на сервере и клиенте, проверять состояние сокета перед этим?

Офлайн

#2 Сен. 16, 2014 22:03:08

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10014
Репутация: +  857  -
Профиль   Отправить e-mail  

Работа с модулем socket

koluna
Надо ли и на сервере и на клиенте выполнять метод close() экземпляров сокета по окончании обмена?
Или это достаточно сделать только на одной стороне?
Надо вернуть объект в исходное состояние. Если что-то открывал, нужно это закрыть. Это связано не только с ресурсами, которые могут заниматься при открытии и освобождаться при закрытии, но и с алгоритмической точки зрения система не должна накапливать состояний, чтобы её можно было повторно использовать.



Отредактировано py.user.next (Сен. 16, 2014 22:03:59)

Офлайн

#3 Сен. 17, 2014 09:23:18

koluna
Зарегистрирован: 2014-07-08
Сообщения: 30
Репутация: +  0  -
Профиль   Отправить e-mail  

Работа с модулем socket

На стороне сервера и для объекта, возвращаемого socket.socket() и для объекта, возвращаемого socket.accept() необходимо вызвать close()?

В простейшем виде:

sck = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
...
conn, addr = sck.accept()
...
conn.close()
sck.close()

Офлайн

#4 Сен. 17, 2014 09:34:47

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10014
Репутация: +  857  -
Профиль   Отправить e-mail  

Работа с модулем socket

Везде, где есть .close(), надо его вызывать при завершении работы с объектом.



Офлайн

#5 Сен. 17, 2014 16:52:40

koluna
Зарегистрирован: 2014-07-08
Сообщения: 30
Репутация: +  0  -
Профиль   Отправить e-mail  

Работа с модулем socket

По ошибкам еще есть вопросы.
Обрабатываю socket.error, в ответ приходит кортеж: первый элемент - номер ошибки, второй - строка с описанием. Такое ощущение, что строка с описанием приходит какая-то обрезанная. Или запятая лишняя…

Сам кортеж, распечатанный print:

(10061, ‘\xcf\xee\xe4\xea\xeb\xfe\xf7\xe5\xed\xe8\xe5 \xed\xe5 \xf3\xf1\xf2\xe0\xed\xee\xe2\xeb\xe5\xed\xee,’)

А вот строка из кортежа:
Подключение не установлено,

Кстати, часть строк описаний приходит на русском, часть - на английском. Можно ли сделать, чтобы все строки были на одном языке?
Где вообще эти строки перечислены?

Офлайн

#6 Сен. 19, 2014 12:04:31

koluna
Зарегистрирован: 2014-07-08
Сообщения: 30
Репутация: +  0  -
Профиль   Отправить e-mail  

Работа с модулем socket

Поясните, пожалуйста, смысл параметра, передаваемого в socket.listen().
Читал документацию, но так и не понял до конца, что это за параметр.
Он ограничивает число клиентов, которые могут подключиться к серверу?

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version