So how to modify my program correctly??I try to add read in different place but it still can't get the result I want.
在 2017年11月12日星期日 UTC+8上午5:05:49,Justin Israel写道: > > > > On Sun, Nov 12, 2017, 10:03 AM Justin Israel <justin...@gmail.com > <javascript:>> wrote: > >> >> >> On Sat, Nov 11, 2017, 9:55 PM <28911...@gmail.com <javascript:>> wrote: >> >>> this is the server program: >>> >>>> package main >>>> >>>> import ( >>>> "fmt" >>>> "net" >>>> "os" >>>> >>> "strings" >>>> ) >>>> >>>> func main() { >>>> >>>> listener, err := net.Listen("tcp", "0.0.0.0:400") >>>> >>> checkError(err) >>>> for i := 0; i < 10; i++ { >>>> conn, err := listener.Accept() >>>> if err != nil { >>>> continue >>>> } >>>> handleClient(conn) >>>> conn.Close() >>>> } >>>> } >>>> func handleClient(conn net.Conn) { >>>> var buf [512]byte >>>> for { >>>> n, err := conn.Read(buf[0:]) >>>> if err != nil { >>>> return >>>> } >>>> rAddr := conn.RemoteAddr() >>>> fmt.Println("receive from client", rAddr.String(), string(buf[0:n])) >>>> >>> n, err2 := conn.Write([]byte("welcome client!")) >>>> >>> if err2 != nil { >>>> return >>>> } >>>> >>> aa := string("nice to meet you") >>>> if strings.Contains(string(buf[0:n]), aa) { >>>> n, err2 = conn.Write([]byte("nice to meet you too")) >>>> >>> if err2 != nil { >>>> return >>>> } >>>> } >>>> } >>>> } >>>> func checkError(err error) { >>>> if err != nil { >>>> fmt.Fprintf(os.Stderr, "fatal error: %s", err.Error()) >>>> os.Exit(1) >>>> } >>>> } >>>> >>> >>>> >>> this is the client program: >>> package main >>> >>> import ( >>> "fmt" >>> "net" >>> "os" >>> ) >>> >>> func main() { >>> var buf [512]byte >>> if len(os.Args) != 2 { >>> fmt.Fprintf(os.Stderr, "usage:%s host:port\n", os.Args[0]) >>> } >>> _, err := net.ResolveTCPAddr("tcp", "127.0.0.1:400") >>> checkError(err) >>> conn, err := net.Dial("tcp", "127.0.0.1:400") >>> checkError(err) >>> rAddr := conn.RemoteAddr() >>> n, err := conn.Write([]byte("hello server!")) >>> checkError(err) >>> n, err = conn.Write([]byte(" nice to meet you")) >>> checkError(err) >>> n, err = conn.Read(buf[0:]) >>> if err != nil { >>> return >>> } >>> checkError(err) >>> fmt.Println("reply from server", rAddr.String(), string(buf[0:n])) >>> conn.Close() >>> os.Exit(0) >>> } >>> func checkError(err error) { >>> if err != nil { >>> fmt.Fprintf(os.Stderr, "fatal error: %s", err.Error()) >>> os.Exit(1) >>> } >>> } >>> >>> >>> Just a little change and I run it successfully.But I am doubt why it >>> can't print "nice to meet you too"??And how to solve it?? >>> >> >> Your server does the following on a new connection >> >> n, err := conn.Read(buf[0:]) >> ... >> n, err2 := conn.Write([]byte("welcome client!")) >> >> Then your client is doing the following on the start of the connection >> >> n, err := conn.Write([]byte("hello server!")) >> ... >> >> n, err = conn.Write([]byte(" nice to meet you")) >> >> Both the client and server are blocking on writing and no one is doing >> any reading. Make sure your client does a read after elderly >> > > Thanks autocorrect. I have no problem with the elderly, but it has no > business here in this response. > > successful write, if you are choosing to do a request/reply pattern. >> >>> -- >>> You received this message because you are subscribed to the Google >>> Groups "golang-nuts" group. >>> To unsubscribe from this group and stop receiving emails from it, send >>> an email to golang-nuts...@googlegroups.com <javascript:>. >>> For more options, visit https://groups.google.com/d/optout. >>> >> -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.