doukuang1950 2016-10-02 17:28
浏览 36

Golang tcp客户端服务器程序

I can do a server program or a client program, but I don't know how to do a client/server program. Does someone knows what's wrong with this code? Thanks.

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)
}

}

  • 写回答

1条回答 默认 最新

  • douqiaolong0528 2016-10-03 01:58
    关注
    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() + "
    "))
            }
        }()
    
        wg.Wait()
    }
    

    SOLVED!!!!

    评论

报告相同问题?

悬赏问题

  • ¥15 多址通信方式的抗噪声性能和系统容量对比
  • ¥15 winform的chart曲线生成时有凸起
  • ¥15 msix packaging tool打包问题
  • ¥15 finalshell节点的搭建代码和那个端口代码教程
  • ¥15 Centos / PETSc / PETGEM
  • ¥15 centos7.9 IPv6端口telnet和端口监控问题
  • ¥20 完全没有学习过GAN,看了CSDN的一篇文章,里面有代码但是完全不知道如何操作
  • ¥15 使用ue5插件narrative时如何切换关卡也保存叙事任务记录
  • ¥20 海浪数据 南海地区海况数据,波浪数据
  • ¥20 软件测试决策法疑问求解答