Go 给定TCP服务器,如何获取连接域地址
我有一个简单的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
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以某种方式传递给了服务器。