【问题标题】:TCP IP CommunicationTCP IP 通信
【发布时间】:2013-03-05 21:27:48
【问题描述】:

我在 C++ 中使用 boost::asio 制作了一个客户端程序,它连接到 TCP/IP 服务器。当我发送命令说“llist”时,它将返回

? "llist"
l1 32x32 Video "Video L1"
l2 512x512 Video "Audio L2"

每个句子都以换行符结尾,在传输结束时,它会有一个额外的换行符。所以我的监听函数从套接字中读取两个字符

 len=_socket->read_some(boost::asio::buffer(reply,sizeof(reply)),error);// char reply[2];

问题是当我检查“\n”时,如果它不起作用。

  if(reply[0]!='\n')
    if(reply[1]!='\n')
       str.insert(i,1,reply[0]); //std::string str;

可能是什么问题?

【问题讨论】:

  • 我可以尝试推断您的逻辑,但我必须做出一些可能不准确的假设。您一次从套接字读取 2 个字符,检查换行符。由于您使用条件清除了 2 个字符,因此您必须同时插入 0 和 1 回复索引。看来您只插入第一个。这是你想要的行为吗?

标签: c++ tcp boost-asio


【解决方案1】:

您没有详细说明问题出在哪里,但猜测一下,您当前的阅读方式会丢弃有效字符(即reply[1] 中的内容)。

您可以改为使用boost::asio::read_until 来读取整行:

boost::asio::read_until(socket, buffer, '\n');

并将空行视为传输的结束。

【讨论】:

    猜你喜欢
    • 2019-03-30
    • 2020-07-16
    • 2015-12-10
    • 2020-03-16
    • 2016-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多