gpt4 book ai didi

go - 使用 Go 的接收和发送 TCP 客户端

转载 作者:IT王子 更新时间:2023-10-29 02:09:34 26 4
gpt4 key购买 nike

我正在尝试在不使用任何库的情况下实现我自己的 P2P 网络。我想构建一个从其他节点发送和接收消息的 TCP 客户端。所以所有节点都应该能够通过 tcp/ip 发送和接收消息。

我目前的问题是,当我启动两个客户端时:一个节点能够接收和发送消息,但另一个节点只能发送消息而不能接收消息。

我想我需要以某种方式实现一个 channel ,但我真的是 Go 的新手,不知道如何实现它。有什么建议么?

代码如下:

Main.go:

package main

func main() {

address := "127.0.0.1:8081" // IP of the other node; hardcoded for now
go startServer()
startClient(address)

}

helpler.go :

package main

import (
"bufio"
"fmt"
"net"
"os"
)

func startClient(address string) {
//connect to this socket
connClient, _ := net.Dial("tcp", address)

for {

//read in input from stdin
reader := bufio.NewReader(os.Stdin)
fmt.Print("Text to send: ")
text, _ := reader.ReadString('\n')

//send to socket
fmt.Fprint(connClient, text+"\n")

//listen for reply
//message, _ := bufio.NewReader(connClient).ReadString('\n')
//fmt.Print("Message from server: " + message)
}
}
func startServer() {
fmt.Println("Starting...")

//listen on all interfaces
ln, _ := net.Listen("tcp", ":8081")

//accept connection on port
connServer, _ := ln.Accept()

//run loop forever
for {
//will listen for message to process ending in newline(\n)
message, _ := bufio.NewReader(connServer).ReadString('\n')

//fmt.Print("Message Received:" + string(message))

//sample process for string received
//newmessage := strings.ToUpper(message)

connServer.Write([]byte(message + "\n"))
}
}

最佳答案

这里是新手 Go 开发人员,但有一个问题我马上就能想到。你不能让多个进程监听同一个 IP 和端口。

您可能对此有疑问,但由于您没有检查错误,所以您没有发现错误。如果您有检查错误的代码,您可能会注意到您收到如下错误:

2018/07/11 09:21:06 listen tcp 127.0.0.1:8081: bind: address already

in use exit status 1

即使这不是您的问题,进行错误检查仍然是个好主意。

我建议您添加支票。例如

服务器端

ln, err := net.Listen("tcp", "127.0.0.1:8081")
if err != nil {
log.Fatal(err)
}

客户端

  conn, err := net.Dial("tcp", "127.0.0.1:8081")
if err != nil {
fmt.Println("error:", err)
}

I think I need to implement a channel somehow

如前所述,我自己是 Go 的新手,但我的理解是 channel 是同一程序中的进程间通信工具。与多个程序无关。如果您在自己喜欢的搜索工具中搜索 go channels,您可以找到更多信息,但不要相信这就是您要查找的内容。

关于go - 使用 Go 的接收和发送 TCP 客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51277199/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com