Перейти к публикации
Форум - ComputerCraft
  • 0
BrightYC

Сетевая карта

Вопрос

Всем привет.Сразу извиняюсь за 20 тысяч вопросов на форуме,но не у кого спросить.

 

Есть проблема с сетевой картой.Хочу передать пакет,и с этим все хорошо. Принять я его тоже могу,но только как

ивент modem_message. Пример как я делал:

msg,receiverAddress,senderAddress,port,distance,message = event.pull("modem_message")
print(senderAddress,message)

Выхлоп-адрес сетевой платы и 3 "nil"

Как отправляю - component.modem.broadcast(89,_,_,_,_,io.read())

 

Всем за ранее спасибо.

Изменено пользователем Alex
форматирование

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


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

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

  • 0

Чтобы понять какие данные принимает модем воспользуемся прогой

local port = 1 --порт модема

local event = require("event")
local com = require ("component")
local modem = com.modem
local number = 0

modem.open(port)

while true do
  number = number + 1
  print("жду сообщение...")
  local e = {event.pull('modem_message')}
  print("сообщение "..number.."\n")
  for a, b in ipairs(e) do
    print(a.." "..tostring(b))
  end
  print(" ")
end

Обычно принимает в таком виде

1  событие modem_message
2  адрес принимающей платы
3  адрес передающей платы
4  порт модема
5  растояние между платами
6  принятое сообщение

Отправить данные для теста с ПК или планшета можно так

local port = 1 --порт модема

local com = require ("component")
local modem = com.modem

print("введите сообщение:")
 
while true do
  modem.broadcast(port,io.read())
end

Использовать полученную информацию, например так

local event = require("event")
local com = require ("component")
local modem = com.modem

modem.open(1) --порт модема

local e = {event.pull('modem_message')}
print(e[6])

В таком виде сообщение будет в шестой строке e[6]

  • Like 2

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


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

 

 

но только как ивент modem_message
 

на моей памяти иначе и никак

 

 

Как отправляю-component.modem.broadcast(89,_,_,_,_,io.read())
 

бродкасту нужны только порт и передаваемые данные, следовательно в твоем примере это должно выглядеть вот так:
component.modem.broadcast(89, io.read())

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


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

первый аргумент - это название события, как я помню, даже с фильтром оно возвращается

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


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

 

на моей памяти иначе и никак

Вернее,я пытаюсь получить данные всего пакета-но он выдаёт только modem_message.Как выдать остальные данные?

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


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

первый аргумент - это название события, как я помню, даже с фильтром оно возвращается

Если быть проще-мне нужен пример как передать весь пакет.С портом,адреса отправителя,данными.

UPD:Однако,это помогло.Не знаю как,но после этого сообщения я сделал все правильно.

Изменено пользователем BrightYC

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


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

-- передача данных, образец
component.modem.broadcast(port, name_key)
--прием данных на эвенте
a = {}
a = event.pull("modem_message")
--ну да дальше работай с массивом, нужные аргументы обрабатывай и все.
--вариант 2 без массива
_, _, _, _, _, sms = event.pull("modem_message")
--тут уже надо методом тыка все подгонять, где сообщение, где чего. Ну и формат передачи данных задавать жеский
  • Like 2

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


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

-- передача данных, образец

component.modem.broadcast(port, name_key)

--прием данных на эвенте

a = {}

a = event.pull("modem_message")

--ну да дальше работай с массивом, нужные аргументы обрабатывай и все.

--вариант 2 без массива

_, _, _, _, _, sms = event.pull("modem_message")

--тут уже надо методом тыка все подгонять, где сообщение, где чего. Ну и формат передачи данных задавать жеский

Всё намного проще

component.modem.broadcast(port,io.read())

message=event.pull("modem_message")

Изменено пользователем BrightYC

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


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

Всё намного проще

component.modem.broadcast(port,io.read())

message=event.pull("modem_message")

Нет. У @Asior правильно (если забыть про то, что вы оба глобальные переменные юзаете). У тебя же в message будет не первая часть сообщения, а название ивента ("modem_message") всегда. Очень сомневаюсь, что именно это нужно.

  • Like 1

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


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

eventName: string, receiverAddress: string, senderAddress: string, port: number, distance: number, data...

  • Like 1

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


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

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

×