我目前正在尝试创建一个TCP服务,该服务仅记录/存储发送给它的任何内容。我似乎无法理解为什么我无法使用DialTCP
连接到本地主机。我不断
dial tcp 127.0.0.1:8080: connect: connection refused
func main() {
errCh := make(chan error)
tcpAddr, _ := net.ResolveTCPAddr("tcp", "localhost:8080")
for {
conn, err := net.DialTCP("tcp", nil, tcpAddr)
if err != nil {
log.Println("Could not connect -> ", err.Error())
} else {
recordMessage(conn, errCh)
err = <-errCh
log.Println("Error", err)
conn.Close()
}
log.Println("trying again in 10 seconds..")
time.Sleep(30 * time.Second)
}
}
我查看了防火墙设置,发现似乎阻止了它。我仍然不确定是由于防火墙相关的原因,还是只是缺少明显的东西。
答案 0 :(得分:0)
首先在终端中运行此Go程序-它监听端口2000,但您可以将其更改为8080或任何您想要的值:
func main() {
// Listen on TCP port 2000 on all interfaces.
l, err := net.Listen("tcp", ":2000")
if err != nil {
log.Fatal(err)
}
defer l.Close()
for {
// Wait for a connection.
conn, err := l.Accept()
if err != nil {
log.Fatal(err)
}
// Handle the connection in a new goroutine.
// The loop then returns to accepting, so that
// multiple connections may be served concurrently.
go func(c net.Conn) {
log.Println(c)
// Echo all incoming data.
io.Copy(c, c)
// Shut down the connection.
c.Close()
}(conn)
}
}
然后在单独的终端中运行以下简单客户端:
func main() {
var addr string
if len(os.Args) > 1 {
addr = os.Args[1]
} else {
addr = "localhost:2000"
}
conn, err := net.Dial("tcp", addr)
if err != nil {
log.Fatal(err)
// handle error
}
fmt.Fprintf(conn, "foobar")
conn.Close()
}
要求它连接到同一端口。连接应该成功,并且您应该看到服务器记录了一些内容。
现在尝试连接您的客户端。
您无需编写Go语言,就可以使用nc
命令行工具( netcat )来完成这些操作。例如,nc -lv PORT
在PORT上创建一个简单的侦听服务器。