Запись на клиентский 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, чтобы он мог их декодировать?

Ответы на вопрос(1)

Ваш ответ на вопрос