私はお互いにUDPとTCPを使いたいです。私はTCP部分のUDP部分の作業についてコメントし、UDP部分のTCP部分の作業についてはコメントします。我々はUDPとTCPの両方を使用することができます)機能で、TCPの一部またはudp一部を渡すことで と行くtcpserverの(のようにそれを呼び出す:私はEDIT UDP部に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といくつかのメッセージを送信する必要がある お互いに
ヨuはTCP接続を受け入れる1つの無限ループに従事しています。あなたはそれが魔法のように出て、入ってくるUDPを処理する2番目の無限ループに入ると予想しています。それは動作しません。なぜあなたはそれがすべきだと思いますか? – EJP
通常、2つのプロトコルを1つのポートにバインドすることは、ネットワーキングでは実現不可能です。 – jeevatkm
'私はお互いにUDPとTCPを使いたいです。 TCPはUDPと通信しません。 –