2016-10-02 162 views
-1

我可以做一个服务器程序或客户端程序,但我不知道如何做一个客户端/服务器程序。 有人知道这段代码有什么问题吗?谢谢。Golang tcp客户端服务器程序

package main 

import (
    "net" 
    "os" 
    "bufio" 
    "io" 
) 

func main() { 
    listen, _ := net.Listen("tcp", "localhost:9001") 


dial, _ := net.Dial("tcp", "localhost:9002") 


scanner := bufio.NewScanner(os.Stdin) 
for scanner.Scan() { 
    conn, _ := listen.Accept() 
    if scanner.Text() == "a"{ 
     conn.Close() 
     listen.Close() 
     dial.Close() 
     break 
    } 
    dial.Write([]byte(scanner.Text())) 

    io.Copy(os.Stdout, conn) 
} 

}

+0

感谢Bart缩进代码。 –

回答

0
package main 

import (
    "net" 
    "sync" 
    "log" 
    "bufio" 
    "os" 
    "io" 
    "time" 
) 

func receiveConn() net.Conn { 
    for{ 
     xx, err := net.Dial("tcp", "localhost:9002") 
     if err == nil{ 
      return xx 
     } 
     time.Sleep(1 * time.Second) 
    } 
} 

var wg sync.WaitGroup 

func main() { 
    wg.Add(2) 

    go func() { 
     listen, err := net.Listen("tcp", "localhost:9001") 
     if err != nil { 
      log.Fatal(err) 
     } 
     defer listen.Close() 

     for { 
      conn, err := listen.Accept() 
      defer conn.Close() 
      if err != nil { 
       log.Fatal(err) 
      } 

      io.Copy(os.Stdout, conn) 

     } 
    }() 

    go func() { 
     dial := receiveConn() 

     defer dial.Close() 
     scanner := bufio.NewScanner(os.Stdin) 
     for scanner.Scan() { 
      if scanner.Text() == "a"{ 
       dial.Write([]byte("Your mate has left the room")) 
       break 
      } 
      dial.Write([]byte(scanner.Text() + "\n")) 
     } 
    }() 

    wg.Wait() 
} 

解决!!!!