Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Go 给定TCP服务器,如何获取连接域地址_Go_Tcp - Fatal编程技术网

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

Go 给定TCP服务器,如何获取连接域地址,go,tcp,Go,Tcp,我有一个简单的TCP服务器,当客户端连接时,我想获取用于连接的域地址: package main import ( "fmt" "net" "os" ) const ( CONN_HOST = "localhost" CONN_PORT = "3333" CONN_TYPE = "tcp" ) func main() { // Listen for incoming connections. l, err := net.Lis

我有一个简单的TCP服务器,当客户端连接时,我想获取用于连接的域地址:

package main

import (
    "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
param,但找不到任何对域地址的引用。尝试过,我对以某种方式获得
test.127.0.0.1.xip.io
感兴趣。有什么想法吗?

普通TCP不可能实现您想要做的事情。TCP在没有域的普通IP地址上工作

要解释发生了什么:

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

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

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


也许你可以这样做,并要求发送原始主机首先通过您的TCP连接

如果我没记错的话,您无法在原始TCP连接上访问“域名”,无论是Go还是任何其他语言。如果您需要用于服务的主机名,您可能需要考虑旋转一个HTTP服务器。任何给定的IP地址都可以通过不同的方式与任意数量的域相关联,范围从0到数百万或更多。第一步是定义“服务器的域”的含义。好的。我知道这一点,但我对这个运行点服务器的服务感到困惑:。他们能够启动一个点服务器(如果我没有弄错的话,它正在监听TCP/根据我的研究),并在客户端连接时以某种方式接收标识符(
a7ac6f
)。这让我相信,这个协议可能缺少一些东西,连接地址/fqdn以某种方式传递给了服务器。