go - 尝试连接到 localhost 时出现“连接:连接被拒绝”
问题描述
我目前正在尝试创建一个 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)
}
}
我查看了我的防火墙设置,并注意到它似乎被阻止了。我仍然不确定它是否是由于与我的防火墙有关的东西,或者我只是错过了一些非常明显的东西。
解决方案
首先在终端中运行这个 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()
}
要求它连接到同一个端口。连接应该成功,您应该看到服务器记录了一些东西。
现在尝试与您的客户建立联系。
nc
在不编写 Go 的情况下,您可以使用命令行工具 ( netcat )来处理这些事情。nc -lv PORT
例如,在 PORT 上创建一个简单的侦听服务器。
推荐阅读
- c# - C# WPF - 具有绘图输出的应用程序
- fancybox - Fancybox 向后播放幻灯片
- razor-pages - 如何列出 .NET Razor Pages 应用程序中的所有页面?
- reactjs - 向烧瓶端点发送表单数据 POST 请求,该请求将被重定向到其他更专用的端点
- r - R中的线性回归循环
- c# - 用于 ValueTasks 的 TaskFactory 和 TaskScheduler?
- f# - 在 F# 中使用 sprintf "%A" 时如何全局控制自动插入的换行符
- uwp - 除非处于开发者模式,否则网站应用程序会因侧载而失败
- tomcat - Apache logstash 输出不显示输出
- r - 如何在r中使用条形图+线图的串扰?