普通网友 2017-10-05 06:49
浏览 68
已采纳

golang net.Conn没有可用数据属性

I am new to go. I have been coding in C# but I need server as well. So I have written a server:

func ServeToClient(client net.Conn) {
for {
    fmt.Fprintln(client,"Serving you!")
    buffer:=make([]byte,1024)
    _, err :=bufio.NewReader(client).Read(buffer)
    if err!=nil{
        fmt.Println(err)
        client.Close()
        fmt.Println("Disconnected duet to the error: ",err.Error())
        return
    }
    data := string(buffer)
    fmt.Println(data)
    command := data[0:2]
    i,err := strconv.Atoi(command)
    if err!=nil {
        fmt.Println(err)
        return
    }
}

But it sees the data as :

{"id":"009","username":"Bungler"}??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????

And I guess it is owing to excess of byte byte array(it is in 1024 length). Is there any property (like in C# Socket.Availabe) to create my byte array properly?

  • 写回答

2条回答 默认 最新

  • 普通网友 2017-10-05 07:08
    关注

    According with Read() you're ignoring the number of bytes read into variable buffer, on this line:

    _, err := bufio.NewReader(client).Read(buffer)

    Just add a new variable n to store the number of bytes:

    n, err := bufio.NewReader(client).Read(buffer)

    and then you can take only that number of bytes from your buffer that has length of 1024:

    data := string(buffer[:n])

    Edit:

    Other alternatives:

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 Matlab怎么求解含参的二重积分?
  • ¥15 苹果手机突然连不上wifi了?
  • ¥15 cgictest.cgi文件无法访问
  • ¥20 删除和修改功能无法调用
  • ¥15 kafka topic 所有分副本数修改
  • ¥15 小程序中fit格式等运动数据文件怎样实现可视化?(包含心率信息))
  • ¥15 如何利用mmdetection3d中的get_flops.py文件计算fcos3d方法的flops?
  • ¥40 串口调试助手打开串口后,keil5的代码就停止了
  • ¥15 电脑最近经常蓝屏,求大家看看哪的问题
  • ¥60 高价有偿求java辅导。工程量较大,价格你定,联系确定辅导后将采纳你的答案。希望能给出完整详细代码,并能解释回答我关于代码的疑问疑问,代码要求如下,联系我会发文档