没有不值得去解决的问题,也没有不值得去学习的技术!

Go 指南中,Web 服务器,报错:listen tcp 127.0.0.1:4000: bind: Only one usage of each socket address (protocol/network address/port) is normally permitted 的分析解决

在 PowerShell 中输入:netstat -ano,查看所有的端口占用情况,看到程序中的端口(4000)已经在另一个程序中处于活动状态(正在使用中)

1、参考 Go 指南中,Web 服务器,编写文件:web-servers.go

Go

package main

import (
	"fmt"
	"log"
	"net/http"
)

type Hello struct{}

func (h Hello) ServeHTTP(
	w http.ResponseWriter,
	r *http.Request) {
	fmt.Fprint(w, "Hello!")
}

func main() {
	var h Hello
	err := http.ListenAndServe("localhost:4000", h)
	if err != nil {
		log.Fatal(err)
	}
}

2、在 PowerShell 中运行:go run web-servers.go,报错:listen tcp 127.0.0.1:4000: bind: Only one usage of each socket address (protocol/network address/port) is normally permitted,如图1

在 PowerShell 中运行:go run web-servers.go,报错:listen tcp 127.0.0.1:4000: bind: Only one usage of each socket address (protocol/network address/port) is normally permitted
图1
Plaintext

PS E:\wwwroot\go\methods> go run web-servers.go
2020/01/09 16:13:46 listen tcp 127.0.0.1:4000: bind: Only one usage of each socket address (protocol/network address/por
t) is normally permitted.
exit status 1

3、在 PowerShell 中输入:netstat -ano,查看所有的端口占用情况,看到程序中的端口(4000)已经在另一个程序中处于活动状态(正在使用中)。如图2

在 PowerShell 中输入:netstat -ano,查看所有的端口占用情况,看到程序中的端口(4000)已经在另一个程序中处于活动状态(正在使用中)
图2
Plaintext

PS E:\wwwroot\go\methods> netstat -ano

活动连接

  协议  本地地址          外部地址        状态           PID
  TCP    0.0.0.0:80             0.0.0.0:0              LISTENING       313324
  TCP    0.0.0.0:135            0.0.0.0:0              LISTENING       1104
  TCP    0.0.0.0:445            0.0.0.0:0              LISTENING       4
  TCP    0.0.0.0:3306           0.0.0.0:0              LISTENING       5520
  TCP    0.0.0.0:4301           0.0.0.0:0              LISTENING       297232
  TCP    0.0.0.0:5040           0.0.0.0:0              LISTENING       8872
  TCP    0.0.0.0:5826           0.0.0.0:0              LISTENING       213692
  TCP    0.0.0.0:6379           0.0.0.0:0              LISTENING       6436
  TCP    0.0.0.0:7680           0.0.0.0:0              LISTENING       964
  TCP    0.0.0.0:10001          0.0.0.0:0              LISTENING       212304
  TCP    0.0.0.0:19531          0.0.0.0:0              LISTENING       5444
  TCP    0.0.0.0:20531          0.0.0.0:0              LISTENING       7760
  TCP    0.0.0.0:49664          0.0.0.0:0              LISTENING       888
  TCP    0.0.0.0:49665          0.0.0.0:0              LISTENING       804
  TCP    0.0.0.0:49666          0.0.0.0:0              LISTENING       1784
  TCP    0.0.0.0:49667          0.0.0.0:0              LISTENING       2364
  TCP    0.0.0.0:49668          0.0.0.0:0              LISTENING       4184
  TCP    0.0.0.0:49671          0.0.0.0:0              LISTENING       880
  TCP    127.0.0.1:4000         0.0.0.0:0              LISTENING       313996
  TCP    127.0.0.1:4000         127.0.0.1:54674        CLOSE_WAIT      313996
  TCP    127.0.0.1:4000         127.0.0.1:55244        CLOSE_WAIT      313996
  TCP    127.0.0.1:4000         127.0.0.1:55279        CLOSE_WAIT      313996
  TCP    127.0.0.1:4000         127.0.0.1:55291        CLOSE_WAIT      313996
  TCP    127.0.0.1:4000         127.0.0.1:55298        CLOSE_WAIT      313996
  TCP    127.0.0.1:4000         127.0.0.1:55306        CLOSE_WAIT      313996
  TCP    127.0.0.1:4000         127.0.0.1:55442        ESTABLISHED     313996
  TCP    127.0.0.1:4012         0.0.0.0:0              LISTENING       7804
  TCP    127.0.0.1:4013         0.0.0.0:0              LISTENING       7804

4、端口 4000 被进程号为 313996 的进程占用,打开 任务管理器 ,找到 Pid 为 313996 的进程,选择 – 结束任务 – 结束进程,如图3

端口 4000 被进程号为 313996 的进程占用,打开 任务管理器 ,找到 Pid 为 313996 的进程,选择 - 结束任务 - 结束进程
图3

5、在 PowerShell 中再次运行:go run web-servers.go,未报错

Plaintext

PS E:\wwwroot\go\methods> go run web-servers.go


关于作者 · 持续学习与技术实践

我是一名拥有 15 年以上开发经验的技术从业者,自 2013 年起持续运营个人技术博客,记录工作与个人项目中遇到的真实问题,以及解决问题过程中的探索、实践和思考。

除了技术写作,我也在持续开发和维护自己的独立项目,探索新技术和新工具在实际场景中的应用。我始终相信,没有不值得去解决的问题,也没有不值得去学习的技术。

如果这篇文章对你有所帮助,欢迎浏览博客中的其他文章,也欢迎交流技术经验与想法。

关于我  ·  GitHub  ·  邮件联系