hs.socket
Общение с пользовательскими протоколами с помощью асинхронных TCP-сокет.
Для UDP-сокетов см. hs.socket.udp.
hs.socket реализован с помощью CocoaAsyncSocket. Функции метки CocoaAsyncSocket предоставляют удобный способ реализации пользовательских протоколов.
Например, вы можете легко реализовать базовый HTTP-клиент следующим образом (хотя для реального мира рекомендуется использовать hs.http):
local TAG_HTTP_HEADER, TAG_HTTP_CONTENT = 1, 2
local body = ""
local function httpCallback(data, tag)
if tag == TAG_HTTP_HEADER then
print(tag, "TAG_HTTP_HEADER"); print(data)
local contentLength = data:match("\r\nContent%-Length: (%d+)\r\n")
client:read(tonumber(contentLength), TAG_HTTP_CONTENT)
elseif tag == TAG_HTTP_CONTENT then
print(tag, "TAG_HTTP_CONTENT"); print(data)
body = data
end
end
client = hs.socket.new(httpCallback):connect("google.com", 80)
client:write("GET /index.html HTTP/1.0\r\nHost: google.com\r\n\r\n")
client:read("\r\n\r\n", TAG_HTTP_HEADER)
Что приведет к следующему выводу в консоль (настройте уровень детализации логов с помощью hs.socket.setLogLevel()) :
LuaSkin: (secondary thread): TCP socket connected
LuaSkin: (secondary thread): Data written to TCP socket
LuaSkin: (secondary thread): Data read from TCP socket
1 TAG_HTTP_HEADER
HTTP/1.0 301 Moved Permanently
Location: http://www.google.com/index.html
Content-Type: text/html; charset=UTF-8
Date: Thu, 03 Mar 2016 08:38:02 GMT
Expires: Sat, 02 Apr 2016 08:38:02 GMT
Cache-Control: public, max-age=2592000
Server: gws
Content-Length: 229
X-XSS-Protection: 1; mode=block
X-Frame-Options: SAMEORIGIN
LuaSkin: (secondary thread): Data read from TCP socket
2 TAG_HTTP_CONTENT
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>301 Moved</TITLE></HEAD><BODY>
<H1>301 Moved</H1>
The document has moved
<A HREF="http://www.google.com/index.html">here</A>.
</BODY></HTML>
LuaSkin: (secondary thread): TCP socket disconnected Socket closed by remote peer
Подмодули
Обзор API
- Переменные - Настраиваемые значения
- Функции - API-вызовы, предлагаемые непосредственно расширением
- Конструкторы - API-вызовы, возвращающие объект, обычно тот, который предлагает методы API
- Методы - API-вызовы, которые могут быть выполнены только на объекте, возвращенном конструктором
Документация API
Переменные
timeout
| Подпись | hs.socket.timeout |
|---|---|
| Тип | Переменная |
| Описание |
Тайм-аут операций сокетов в секундах. |
| Примечания |
|
| Исходный код | extensions/socket/socket.lua строка 162 |
Функции
parseAddress
| Подпись | hs.socket.parseAddress(sockaddr) -> table or nil |
|---|---|
| Тип | Функция |
| Описание |
Парсит двоичную структуру адреса сокета в читаемый столбец. |
| Параметры |
|
| Возвращаемое значение |
|
| Примечания |
Семейство адресов | Число | Описание :--- | :--- | : AF_UNSPEC | 0 | неопределенное AF_UNIX | 1 | локальный для хоста (каналы) AF_LOCAL | AF_UNIX | обратная совместимость AF_INET | 2 | интернет: UDP, TCP и т. д. AF_NS | 6 | протоколы XEROX NS AF_CCITT | 10 | протоколы CCITT, X.25 и т. д. AF_APPLETALK | 16 | Apple Talk AF_ROUTE | 17 | Внутренний протокол маршрутизации AF_LINK | 18 | интерфейс уровня связи AF_INET6 | 30 | IPv6 |
| Исходный код | extensions/socket/libsocket.m строка 187 |
Конструкторы
new
| Подпись | hs.socket.new([fn]) -> hs.socket object |
|---|---|
| Тип | Конструктор |
| Описание |
Создает объект асинхронного TCP-сокета без подключения. |
| Параметры |
|
| Возвращаемое значение |
|
| Исходный код | extensions/socket/libsocket.m строка 154 |
server
| Подпись | hs.socket.server(port | path [, fn]) -> hs.socket object |
|---|---|
| Тип | Конструктор |
| Описание |
Создает TCP-сокет и привязывает его к порту или пути (сокет Unix-домена) для прослушивания. |
| Параметры |
|
| Возвращаемое значение |
|
| Исходный код | extensions/socket/socket.lua строка 190 |
Методы
connect
| Подпись | hs.socket:connect(host, port | path [, fn]) -> self or nil |
|---|---|
| Тип | Метод |
| Описание |
Подключает неподключенный сокет. |
| Параметры |
|
| Возвращаемое значение |
|
| Примечания |
|
| Исходный код | extensions/socket/libsocket.m строка 234 |
connected
| Подпись | hs.socket:connected() -> bool |
|---|---|
| Тип | Метод |
| Описание |
Возвращает состояние подключения сокета. |
| Параметры |
|
| Возвращаемое значение |
|
| Примечания |
|
| Исходный код | extensions/socket/libsocket.m строка 572 |
connections
| Подпись | hs.socket:connections() -> number |
|---|---|
| Тип | Метод |
| Описание |
Возвращает количество подключений к сокету. |
| Параметры |
|
| Возвращаемое значение |
|
| Примечания |
|
| Исходный код | extensions/socket/libsocket.m строка 593 |
disconnect
| Подпись | hs.socket:disconnect() -> self |
|---|---|
| Тип | Метод |
| Описание |
Отключает сокет, освобождая его для повторного использования. |
| Параметры |
|
| Возвращаемое значение |
|
| Примечания |
|
| Исходный код | extensions/socket/libsocket.m строка 345 |
информация
| Подпись | hs.socket:info() -> table |
|---|---|
| Тип | Метод |
| Описание |
Возвращает информацию о сокете. |
| Параметры |
|
| Возвращаемое значение |
|
| Источник | extensions/socket/libsocket.m строка 614 |
прослушивание
| Подпись | hs.socket:listen(port|path) -> self or nil |
|---|---|
| Тип | Метод |
| Описание |
Связывает несвязанный сокет с портом или путем (сокет Unix-домена) для прослушивания. |
| Параметры |
|
| Возвращаемое значение |
|
| Источник | extensions/socket/libsocket.m строка 297 |
чтение
| Подпись | hs.socket:read(delimiter[, tag]) -> self or nil |
|---|---|
| Тип | Метод |
| Описание |
Чтение данных из сокета. |
| Параметры |
|
| Возвращаемое значение |
|
| Примечания |
|
| Источник | extensions/socket/libsocket.m строка 369 |
получение
| Подпись | hs.socket:receive(delimiter[, tag]) -> self |
|---|---|
| Тип | Метод |
| Описание |
Псевдоним для |
| Параметры | |
| Возвращаемое значение | |
| Источник | extensions/socket/socket.lua строка 225 |
отправка
| Подпись | hs.socket:send(message[, tag]) -> self |
|---|---|
| Тип | Метод |
| Описание |
Псевдоним для |
| Параметры | |
| Возвращаемое значение | |
| Источник | extensions/socket/socket.lua строка 231 |
установитьОбратныйВызов
| Подпись | hs.socket:setCallback([fn]) -> self |
|---|---|
| Тип | Метод |
| Описание |
Устанавливает обратный вызов для чтения из сокета. |
| Параметры |
|
| Возвращаемое значение |
|
| Примечания |
|
| Источник | extensions/socket/libsocket.m строка 473 |
установитьТаймаут
| Подпись | hs.socket:setTimeout(timeout) -> self |
|---|---|
| Тип | Метод |
| Описание |
Устанавливает таймаут для операций с сокетом. |
| Параметры |
|
| Возвращаемое значение |
|
| Примечания |
|
| Источник | extensions/socket/libsocket.m строка 503 |
начатьTLS
| Подпись | hs.socket:startTLS([verify][, peerName]) -> self |
|---|---|
| Тип | Метод |
| Описание |
Обеспечивает безопасность сокета с помощью TLS. |
| Параметры |
|
| Возвращаемое значение |
|
| Примечания |
|
| Источник | extensions/socket/libsocket.m строка 527 |
запись
| Подпись | hs.socket:write(message[, tag, fn]) -> self |
|---|---|
| Тип | Метод |
| Описание |
Запись данных в сокет. |
| Параметры |
|
| Возвращаемое значение |
|
| Примечания |
|
| Источник | extensions/socket/libsocket.m строка 429 |
© 2014–2017 Hammerspoon contributors
Licensed under the MIT License.
https://www.hammerspoon.org/docs/hs.socket.html