绑定:请求的地址在其上下文中无效

bind: The requested address is not valid in its context

我在 golang 上开发了一个机器人。使用 ubuntu 20.01 OS 在 vds 上启动它,它运行良好,但是当我开始调试我的代码时,这是一个问题。因此,我决定将我的 PC 用作 VDS:我已经打开了 8443 端口等。但是当 main.go 是开始时出现错误:

listen tcp [ip]:8443: bind: The requested address is not valid in its context.

我的代码:

package main

import (
    "./configuration"
    "./get_data"
    "encoding/json"
    "fmt"
    tgBotApi "github.com/go-telegram-bot-api/telegram-bot-api"
    "io/ioutil"
    "net/http"
    "strings"
    "time"
)

var (
    NewBot, BotErr = tgBotApi.NewBotAPI(configuration.BOT_TOKEN)
)
func setWebhook(bot *tgBotApi.BotAPI) {
    webHookInfo := tgBotApi.NewWebhookWithCert(fmt.Sprintf("https://%s:%s/%s",
        configuration.BOT_HOST, configuration.BOT_PORT, configuration.BOT_TOKEN), configuration.CERT_FILE)
    _, err := bot.SetWebhook(webHookInfo)
    if err != nil {
        fmt.Println(err)
    }
}
func main () {
    fmt.Println("OK", time.Now().Unix(), time.Now(), time.Now().Weekday())
    setWebhook(NewBot)

    message := func (w http.ResponseWriter, r *http.Request) {
        text, _ := ioutil.ReadAll(r.Body)
        var botText = get_data.BotMessage{}
        _ = json.Unmarshal(text, &botText)
        chatGroup := int64(botText.Message.Chat.Id)
        botCommand := strings.Split(botText.Message.Text, "@")[0]

        /*markup := tgBotApi.InlineKeyboardMarkup{
            InlineKeyboard: [][]tgBotApi.InlineKeyboardButton{
                []tgBotApi.InlineKeyboardButton{
                    tgBotApi.InlineKeyboardButton{Text: "start"},
                },
            },
        }*/
        //reply := tgBotApi.NewEditMessageReplyMarkup(chatGroup, messageId, markup)
        var msg tgBotApi.MessageConfig
        switch botCommand {
            case "/start":
                msg = tgBotApi.NewMessage(chatGroup, helloCommandMsg())
                msg.ReplyMarkup = tgBotApi.NewReplyKeyboard(
                    []tgBotApi.KeyboardButton{catalogBtn.Btn},
                    []tgBotApi.KeyboardButton{myProfileBtn.Btn, supportBtn.Btn},
                    []tgBotApi.KeyboardButton{getLuckyBtn.Btn, rulesBtn.Btn},
                    []tgBotApi.KeyboardButton{addFundsBtn.Btn},
                )
                break
            case getLuckyBtn.Btn.Text:
                getLuckyBtn.Action(botText, NewBot)
                break
            case myProfileBtn.Btn.Text:
                myProfileBtn.Action(botText, NewBot)
                break
            case addFundsBtn.Btn.Text:
                addFundsBtn.Action(botText, NewBot)
                break
            default:
                msg = tgBotApi.NewMessage(chatGroup, unknownCommandMsg())
        }
        NewBot.Send(msg)
    }
    http.HandleFunc("/", message)
    errListenTLS := http.ListenAndServeTLS(fmt.Sprintf("%s:%s", configuration.BOT_HOST, configuration.BOT_PORT), configuration.CERT_FILE, configuration.CERT_KEY, nil)
    if errListenTLS != nil {
        fmt.Println(errListenTLS)
    }
}

configuration/main_config.go:

package configuration

const (
    TELEGRAM_URL = "https://api.telegram.org/bot"
    BOT_TOKEN = MYTOKEN
    BOT_HOST = "[ip]"
    BOT_PORT = "8443"
)

configuration/cert_config.go:

package configuration

const (
    CERT_FILE = "C:\Users\USER\Desktop\GOlocal\BOTlocal\certificates\mybot.pem"
    CERT_KEY = "C:\Users\USER\Desktop\GOlocal\BOTlocal\certificates\mybot.key"
)

我已经生成了本主题中的证书:

此外,我试图设置 0.0.0.0 而不是我的 public ip 然后出现此错误:

Bad Request: bad webhook: IP address 0.0.0.0 is reserved

错误bind: The requested address is not valid in its context.表示该地址不属于您机器上的网络接口。可能有一个 router/load balancer/etc... 具有实际的 public 地址,它正在将流量转发到您的计算机。

您需要拆分您使用的地址:

  • 您的本地地址(参见 ifconfig)或 0.0.0.0 所有接口作为传递给 http.ListenAndServeTLS
  • 的地址
  • public地址作为回调地址传入NewWebhookWithCert