Golang UDP和TCP彼此相邻
问题描述:
我想在彼此旁边使用UDP和TCP。当我评论TCP部分UDP部分工作和当我评论UDP部分TCP部分工作时。 我需要发送带有TCP一些消息,然后在UDP部分Golang UDP和TCP彼此相邻
func main() {
//
// ─── TCP ────────────────────────────────────────────────────────────────────
//
// Listen for incoming connections.
l, err := net.Listen("tcp", "localhost"+":"+"3000")
if err != nil {
fmt.Println("Error listening:", err.Error())
os.Exit(1)
}
// Close the listener when the application closes.
defer l.Close()
fmt.Println("Listening on " + "localhost" + ":" + "3000")
for {
// Listen for an incoming connection.
conn, err := l.Accept()
if err != nil {
fmt.Println("Error accepting: ", err.Error())
os.Exit(1)
}
// Handle connections in a new goroutine.
go gotcp.HandleRequest(conn)
//go handler(conn)
}
//
// ─── UDP ────────────────────────────────────────────────────────────────────
//
// then we should check which struct is empty and fill them
/* Lets prepare a address at any address at port 10001*/
ServerAddr, err := net.ResolveUDPAddr("udp", ":3000")
goudp.CheckError(err)
/* Now listen at selected port */
ServerConn, err := net.ListenUDP("udp", ServerAddr)
goudp.CheckError(err)
defer ServerConn.Close()
buf := make([]byte, 1024)
for {
n, addr, err := ServerConn.ReadFromUDP(buf)
//fmt.Println("Received ", string(buf[0:n]), " from ", addr)
if err != nil {
fmt.Println("Error: ", err)
}
// *** broadcasting
//start := time.Now()
if v, ok := goudp.RRoom()[djr]; ok {
//fmt.Println("get room name ", v)
go goudp.BroadCast(string(buf[0:n]), djr, ServerConn, v)
//delete(R, "x")
//go sendResponse(ServerConn, v.UserAddr1)
}
//elapsed := time.Since(start)
//log.Printf("Binomial took %s", elapsed)
}
}
编辑使用: 通过传递TCP部分或UDP部分的功能,并调用它像去TCPSERVER(),我们可以同时使用UDP和TCP彼此相关
答
正如putu指出的那样,您需要一些并发才能正常工作。 ()函数(函数()函数),这是为什么nodejs应用程序有这个object.method(函数()函数) {})模式,但要获得与此相似的内容,您需要将TCP和UDP部分封装在一个单独的函数中,每个函数都有一个无限循环。
为了证明这个概念做这样的事情:
...
go func(){
// paste your tcp code here
}
...
go func(){
// paste your udp code here
}
即“走出去”说明书上说该代码的这部分应并行方式在实际项目中,您将设置运行过程中,编译器在这些代码部分的正常运作,并从你的主要功能只要致电:
...
go serveTCP();
go serve UDP();
...
更多的并发去这里=>https://tour.golang.org/concurrency/1
呦你正在从事一个接受TCP连接的无限循环,并且你期望它会奇迹般地退出并进入你处理传入UDP的第二个无限循环。它不会工作。不清楚为什么你认为它应该。 – EJP
通常将两个协议绑定到一个端口在联网中是不可行的。 – jeevatkm
'我想互相使用UDP和TCP .'没办法。 TCP不与UDP通信。 –