Запись на клиентский UDP-сокет в Go
Я ищу хорошее решение для связи клиент-сервер с сокетами UDP на языке Go.
Примеры, которые я нашел в Интернете, показывают мне, как отправлять данные на сервер, но они не учат, как отправлять их обратно клиенту.
Чтобы продемонстрировать, моя программа делает следующее:
Моя клиентская программа создает сокет на порту 4444, например:
con, err := net.Dial("udp", "127.0.0.1:4444")
Я отправил строку и локальный адрес на сервер, чтобы он мог распечатать строку и отправить сообщение ОК. Я использую GOB для этого:
enc := gob.NewEncoder(con)
enc.Encode(Data{"test", con.LocalAddr().String()})
Моя структура данных выглядит так:
type Data struct{
Msg string
Addr string
}
Мой сервер прослушивает порт 4444 и правильно декодирует Gob, но как я могу отправить обратно сообщение OK? Я использую адрес клиента для этого (на сервере .go файл):
con, err := net.Dial("udp", data.Addr)
Затем я получаю код ошибки:
write udp 127.0.0.1:35290: connection refused
Когда клиент пытается подключиться к порту 4444 Сервера, клиент создает порт со случайным номером (в данном случае 35290), чтобы они могли обмениваться данными. Я знаю, что не должен передавать адрес клиента на сервер, но conn.RemoteAddress () не работает. Решение, которое обнаруживает адрес клиента, было бы очень ценно.
Обс .: Я знаю, что есть ReadFromUDP, поэтому я могу прочитать пакет. Должен ли я прочитать его, узнать адрес клиента и отправить данные в Gob, чтобы он мог их декодировать?