TCP聊天应用程序字符串连接错误

时间:2017-10-25 15:38:11

标签: go

在Go中构建一个简单的基于TCP的聊天应用程序时遇到了一些困难。我的问题是,在更改变量名称后,格式化似乎变得混乱,并且消息文本会覆盖发件人和其他字符的名称。

以下所有代码段均来自服务器。

type Message struct {
    sender *User
    message string
}

type User struct {
    connection net.Conn
    queue chan string//Simply a queue of messages that will be sent to the client, out of the scope of this question
    name string
}

设置名称的代码:(假设命令的格式为“/ nick NAME”)

command := message.message[1:]
if(strings.HasPrefix(command, "nick")) {
    message.sender.name = command[5:]
    fmt.Println("Set name to: " + message.sender.name)
}

打印值的代码(请注意,如果我使用传统的s1 + s2连接字符串时错误仍然存​​在):

var buffer bytes.Buffer
buffer.WriteString("<")
buffer.WriteString(message.sender.name)
buffer.WriteString("> ")
buffer.WriteString(message.message)
fmt.Println(buffer.String())
sendMessage(buffer.String())

输出(左侧服务器,右侧客户端。不是我两次都发送消息'测试'):

Output

如上所示,消息的格式应该是<NewName123> Test,但是大于符号的位置是错误的,可以看到消息测试覆盖用户的名称。我很难过导致这个问题的原因。 应用程序的工作方式如下:客户端连接。客户端发送消息,服务器读取消息并应用格式(IE添加用户名)。服务器将邮件重新分发给所有用户(包括发件人)。客户端显示消息。

任何帮助都会很棒。

1 个答案:

答案 0 :(得分:4)

这看起来像名称包含一个回车符(# html template <input name="query" class="form-control mr-sm-2" type="text" placeholder="Search"> # view query = request.GET.get('query') ),它指示终端写\r,然后将回车(也就是。游标)返回到行的开头,然后(结束)写<NewName123>

在某个地方进行> Test调用应解决此问题。