go - 从终端关闭服务器的正确方法是什么?

标签 go network-programming

我正在尝试使用 Go 进行一些基本的聊天(服务器 + 客户端),所以我有一个服务器监听特定端口,我有一个客户端写入这个端口。

但是,由于我是新手,所以我不断进行更改并且必须重新启动服务器等。每次我想停止服务器时我都在执行“Ctrl + C”但这显然很愚蠢,因为我必须更改每次编译的端口号......正确的方法是什么?我目前正在做

defer ln.Close()

在建立连接后服务器的主要功能中,但我猜 Ctrl + C 只是终止进程而不关闭连接?

编辑:更多信息。 我在 Windows 上运行 cygwin。 ps 显示没有旧进程,但我在任务管理器中发现了一个“server.exe”(我的服务器文件名为 server.go)。

最佳答案

除非您使用 os/signal当您按下 Ctrl+C 时通知您的包将不会运行您的 defer 语句。

这里是一个处理 SIGINT (Ctrl+C) 的例子,可以干净地退出程序。

func main() {
    done := make(chan os.Signal)
    go signal.Notify(done, syscall.SIGINT)

    go func() {
         // your tcp server goes here along with the defer to clean up your server
    }()

    <-done

    // exit cleanly
}

关于go - 从终端关闭服务器的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29973382/

相关文章:

javascript - 如何用nodejs解析telnet数据

ubuntu - Ubuntu 中的 FFmpeg RTP 网络问题

go - 确保值仅被检索一次

xml - 在 Golang 中编码 XML : field is empty (APPEND doesn't work? )

linux - 如何确定远程SSH登录的子网掩码和网卡?

Windows 用户空间 TCP/IP 堆栈 - 如何抑制指定以太网接口(interface)的内核堆栈?

delphi - Delphi-如何监控网络

go - 为什么没有接收器被阻塞的错误?

go - 我不能在golang中使用变量进行时间计算吗?

go - 使用Echo框架进行基本身份验证