【问题标题】:Garbage in TCP message - C++/Java communicationTCP 消息中的垃圾 - C++/Java 通信
【发布时间】:2014-07-25 19:55:23
【问题描述】:

我的 C++ 客户端 - Java 服务器应用程序有一个小问题。 套接字成功连接,并传输了几条消息,但接下来是这部分:

msgBuilder<<"TASK?\n";
mymsg = msgBuilder.str();
send(tcp_sock,mymsg.c_str(),8,0);
msgBuilder.str("");
msgBuilder.clear();

java端读取

msg = in.readLine();
while(!(msg.equals("TASK?"))){
System.out.println("Got "+msg+" expected TASK?");
msg = in.readLine();
}

问题是,它读取了两个我认为是空字符,出于某种原因我无法在此处粘贴。 我猜我可以通过切换到“包含”来克服它,但我对造成这种情况的原因很感兴趣?

【问题讨论】:

  • send 正在传输 8 个字节,而 msg 是 6 个字节,因此您将在换行符后的缓冲区中获得 2 个字节的垃圾。你想发送 mymsg.length()。
  • 哦,复制粘贴代码的危害!谢谢伙计,实际上是之前的 send 调用在缓冲区中留下了垃圾。问题解决了!
  • 您还需要先检查msg 是否有null,然后再对它进行任何操作。
  • 另外,这看起来像 C++ 而不是 C
  • @ChrisStratton 也是真的,会改的

标签: java c++ sockets tcp send


【解决方案1】:
send(tcp_sock,mymsg.c_str(),8,0);

应该是

send(tcp_sock,mymsg.c_str(),mymsg.length(),0); // or size() or whatever it is. Not 8.

【讨论】:

    猜你喜欢
    • 2010-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-04
    • 1970-01-01
    • 2015-05-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多