Перейти к содержимому
  • 0
OpenReactor

Как это зделать на Lua?

Вопрос

import socket

server = ("localhost", 8888) #I don't remember the port

soc = socket.socket()
soc.connect(server)

version = soc.recv(5) #Decode it

soc.send(bytes("PING", encoding="utf8"))

pong = soc.recv(8) #Decode it

Как реалезовать это:

bytes("PING", encoding="utf8")

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Рекомендуемые сообщения

Только байты интересуют? С сокетами проблем нету? У меня сомнения, потому что вопрос элементарный. Тем не менее.

 

В питоне строка str хранит последовательность символов (codepoint) юникода каким-то абстрактным образом, потому что закодировать их можно по-разному: utf-8, utf-1, utf-16, utf-32, ucs-2 или какая-то другая, самопальная кодировка. bytes же — это набор байтов, как можно догадаться, а не символов. Если мы хотим из str сделать bytes, нужно абстрактный набор юникод-символов превратить в конкретную последовательность байтов — этим и занимается кодировка.

 

Здесь bytes("PING", encoding="utf8") вернёт то же, что и литерал b'PING' в utf8-кодированном исходнике, например: последовательность из 4 байтов с номерами 90, 73, 78, 71.

 

Теперь про Луа. В Луа никакого абстрактного набора символов нет. Строка в Луа — это не набор символов юникода, как str, а конкретная последовательность из произвольных байтов. То есть такая же вещь, как и bytes в Питоне.

 

Поэтому аналог bytes("PING", encoding="utf8"), или же b'PING' (если исходник в кодировке utf-8), — просто "PING" (впрочем, опять-таки, в utf8-кодированном коде)

sock:write("PING")

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
1 час назад, Fingercomp сказал:

Только байты интересуют? С сокетами проблем нету? У меня сомнения, потому что вопрос элементарный. Тем не менее.

 

В питоне строка str хранит последовательность символов (codepoint) юникода каким-то абстрактным образом, потому что закодировать их можно по-разному: utf-8, utf-1, utf-16, utf-32, ucs-2 или какая-то другая, самопальная кодировка. bytes же — это набор байтов, как можно догадаться, а не символов. Если мы хотим из str сделать bytes, нужно абстрактный набор юникод-символов превратить в конкретную последовательность байтов — этим и занимается кодировка.

 

Здесь bytes("PING", encoding="utf8") вернёт то же, что и литерал b'PING' в utf8-кодированном исходнике, например: последовательность из 4 байтов с номерами 90, 73, 78, 71.

 

Теперь про Луа. В Луа никакого абстрактного набора символов нет. Строка в Луа — это не набор символов юникода, как str, а конкретная последовательность из произвольных байтов. То есть такая же вещь, как и bytes в Питоне.

 

Поэтому аналог bytes("PING", encoding="utf8"), или же b'PING' (если исходник в кодировке utf-8), — просто "PING" (впрочем, опять-таки, в utf8-кодированном коде)


sock:write("PING")

 

Спасибо! С сокетами нету проблем)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вы вставили отформатированное содержимое.   Удалить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


×
×
  • Создать...