You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Golang Socket编程绑定IP报错:请求的地址在其上下文中无效

Go 跨机器Socket通信正确实现方案

你遇到的bind: The requested address is not valid in its context错误,核心原因是服务端错误地绑定了客户端的IP地址。服务端的监听地址必须是自身机器的网卡IP,或者用0.0.0.0监听所有可用网卡,不能绑定其他机器的IP。

服务端代码

package main

import (
	"bufio"
	"fmt"
	"net"
)

const (
	SERVER_HOST = "0.0.0.0" // 监听所有网卡,也可替换为服务端自身IP(如192.168.137.178)
	SERVER_PORT = "4402"
	SERVER_TYPE = "tcp"
)

func main() {
	// 启动监听
	listener, err := net.Listen(SERVER_TYPE, SERVER_HOST+":"+SERVER_PORT)
	if err != nil {
		fmt.Println("监听失败:", err.Error())
		return
	}
	defer listener.Close()
	fmt.Println("正在监听 " + SERVER_HOST + ":" + SERVER_PORT)
	fmt.Println("等待客户端连接...")

	// 接受客户端连接
	conn, err := listener.Accept()
	if err != nil {
		fmt.Println("接受连接失败:", err.Error())
		return
	}
	defer conn.Close()
	fmt.Println("客户端已连接,地址:", conn.RemoteAddr().String())

	// 读取客户端消息
	message, err := bufio.NewReader(conn).ReadString('\n')
	if err != nil {
		fmt.Println("读取消息失败:", err.Error())
		return
	}
	fmt.Println("收到消息:", message)

	// 发送响应给客户端
	_, err = conn.Write([]byte("消息已收到: " + message))
	if err != nil {
		fmt.Println("发送响应失败:", err.Error())
		return
	}
}

客户端代码

package main

import (
	"bufio"
	"fmt"
	"net"
	"os"
)

const (
	SERVER_HOST = "192.168.137.178" // 填写服务端实际IP
	SERVER_PORT = "4402"
	SERVER_TYPE = "tcp"
)

func main() {
	// 连接服务端
	conn, err := net.Dial(SERVER_TYPE, SERVER_HOST+":"+SERVER_PORT)
	if err != nil {
		fmt.Println("连接服务端失败:", err.Error())
		return
	}
	defer conn.Close()
	fmt.Println("已连接到服务端")

	// 读取用户输入并发送
	fmt.Print("输入要发送的消息: ")
	reader := bufio.NewReader(os.Stdin)
	message, _ := reader.ReadString('\n')

	_, err = conn.Write([]byte(message))
	if err != nil {
		fmt.Println("发送消息失败:", err.Error())
		return
	}

	// 读取服务端响应
	response, err := bufio.NewReader(conn).ReadString('\n')
	if err != nil {
		fmt.Println("读取响应失败:", err.Error())
		return
	}
	fmt.Println("服务端响应:", response)
}

关键注意事项

  • 服务端监听地址:0.0.0.0会监听所有可用网卡,适用于跨机器场景;如果指定具体IP,必须是服务端机器自身存在的网卡地址。
  • 防火墙设置:确保服务端机器的防火墙开放了4402端口,否则客户端无法建立连接。
  • 网络验证:确认两台机器在同一网段,且能互相ping通(你已满足该条件)。

内容的提问来源于stack exchange,提问作者Daniel Perdana Putra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 04:33:37