drz5553 2015-02-27 04:29
浏览 6
已采纳

tcp客户端结束而未到达某些语句

The code below is suppose to open a connection to a server, send a message and wait for a reply before ending but the problem is it isn't even reaching the end of the function. What could be wrong? Should I use wg sync.WaitGroup?

func client(servId uint16, servAddr string) {

    tcpAddr, err := net.ResolveTCPAddr("tcp", servAddr)
    check(err)

    conn, err := net.DialTCP("tcp", nil, tcpAddr)
    check(err)

    _, err = conn.Write(handshake(servId, 1500))
    check(err)

    init := make([]byte, 8)
    _, err = io.ReadFull(conn, init)
    check(err)

    fmt.Println("is reached") // doesn't get printed WHY?
    fmt.Println(init)
}

How the function above is called from main

// vars
var c, startId, servId uint16

// for each servers
for s := 0; s < len(config.Servers); s++ {

    // for each connection
    for c = 0; c < config.Total_clients; c++ {

        startId = config.Server_id * config.Total_clients
        servId = startId + c

        servAddr := fmt.Sprintf("%s:%d", config.Servers[s].Host, config.Servers[s].Port)

        // create the clients in new go routines
        go client(servId, servAddr)
    }

}
  • 写回答

1条回答 默认 最新

  • duanchouyi6730 2015-02-27 04:38
    关注

    Your program will exit before it finishes executing, you need to use sync.WaitGroup or channels to wait for all the output before exiting.

    func client(wg *sync.WaitGroup, servId uint16, servAddr string) {
        defer wg.Done()
    .....
    }
    
    func main() {
        var (
            c, startId, servId uint16
            wg                 sync.WaitGroup
        )
        for _, srv := range config.Servers {
            for c = 0; c < config.Total_clients; c++ {
            ......
                wg.Add(1)
                go client(&wg, servId, servAddr)
            }
        }
        wg.Wait()
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
  • ¥20 怎么用dlib库的算法识别小麦病虫害
  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 java写代码遇到问题,求帮助
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?