为了账号安全,请及时绑定邮箱和手机立即绑定

给定一个TCP服务器,如何获取连接域地址

给定一个TCP服务器,如何获取连接域地址

Go
临摹微笑 2022-06-06 14:43:18
我有一个简单的 TCP 服务器,当客户端连接时,我想获取用于连接的域地址:package mainimport (    "fmt"    "net"    "os")const (    CONN_HOST = "localhost"    CONN_PORT = "3333"    CONN_TYPE = "tcp")func main() {    // Listen for incoming connections.    l, err := net.Listen(CONN_TYPE, CONN_HOST+":"+CONN_PORT)    if err != nil {        fmt.Println("Error listening:", err.Error())        os.Exit(1)    }    // Close the listener when the application closes.    defer l.Close()    fmt.Println("Listening on " + CONN_HOST + ":" + CONN_PORT)    for {        // Listen for an incoming connection.        conn, err := l.Accept()        if err != nil {            fmt.Println("Error accepting: ", err.Error())            os.Exit(1)        }        // Handle connections in a new goroutine.        go handleRequest(conn)    }}// Handles incoming requests.func handleRequest(conn net.Conn) {    // Make a buffer to hold incoming data.    buf := make([]byte, 1024)    // Read the incoming connection into the buffer.    _, err := conn.Read(buf)    if err != nil {        fmt.Println("Error reading:", err.Error())    }    // Send a response back to person contacting us.    conn.Write([]byte("Message received."))    // Close the connection when you're done with it.    conn.Close()}我尝试调试conn net.Conn参数,但找不到对域地址的任何引用。尝试使用http://test.127.0.0.1.xip.io:3333/并且我有兴趣以test.127.0.0.1.xip.io某种方式获得。有任何想法吗?
查看完整描述

1 回答

?
千万里不及你

TA贡献1784条经验 获得超9个赞

使用纯 TCP 无法实现您尝试做的事情。TCP 适用于没有域的普通 IP 地址。

解释发生了什么:

当您建立连接时,例如example.com,首先example.com完成 DNS 查找。在这种情况下,DNS 查找将导致93.184.216.34您可以在此处阅读有关 DNS的更多信息。

之后建立TCP 连接93.184.216.34,原始域名不会随请求一起发送。

因为您有时需要用户尝试连接的原始名称,所以某些协议会在连接后发送域名。例如,HTTP 通过Hostheader做到这一点。

也许您可以做类似的事情并要求首先通过您的 TCP 连接发送原始主机!


查看完整回答
反对 回复 2022-06-06
  • 1 回答
  • 0 关注
  • 139 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信