Vous essayez d'implémenter une architecture client-serveur simple à l'aide de sockets Unix, mais vous avez rencontré un problème problème de flux de données unidirectionnel. Examinons le code et résolvons le problème.
Dans votre code client, vous envoyez des messages au serveur avec succès, mais le serveur ne répond pas. Cela suggère qu'il vous manque une étape cruciale : la lecture de la réponse du serveur. Dans le code client révisé ci-dessous, nous avons ajouté une goroutine de lecture pour gérer la lecture des données du serveur.
// Client code with a reader goroutine package main import ( "io" "log" "net" "time" ) func reader(r io.Reader) { buf := make([]byte, 1024) for { n, err := r.Read(buf[:]) if err != nil { return } println("Client got:", string(buf[0:n])) } } func main() { c, err := net.Dial("unix", "/tmp/echo.sock") if err != nil { panic(err) } defer c.Close() go reader(c) for { _, err := c.Write([]byte("hi")) if err != nil { log.Fatal("write error:", err) break } time.Sleep(1e9) } }
Côté serveur, votre code semble correct. Cependant, il est impératif de gérer les erreurs dans les goroutines et de fermer les connexions une fois terminé, comme indiqué dans le code du serveur modifié ci-dessous :
// Server code with error handling and connection closing package main import ( "log" "net" ) func echoServer(c net.Conn) { defer c.Close() // Ensure connection is closed when the goroutine exits for { buf := make([]byte, 512) nr, err := c.Read(buf) if err != nil { log.Fatal("read error:", err) } data := buf[0:nr] _, err = c.Write(data) if err != nil { log.Fatal("write error:", err) } } } func main() { l, err := net.Listen("unix", "/tmp/echo.sock") if err != nil { log.Fatal("listen error:", err) } for { fd, err := l.Accept() if err != nil { log.Fatal("accept error:", err) } go echoServer(fd) } }
Avec ces modifications en place, votre communication client-serveur devrait désormais être entièrement bi- directionnel, permettant aux données de circuler dans les deux sens.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!