【问题标题】:Socket writes to program after it gets terminated (C)套接字在终止后写入程序 (C)
【发布时间】:2017-09-16 14:52:56
【问题描述】:

希望你一切都好。

我的问题是我有一个在 Java 上运行的服务器和一个在 C 上运行的客户端。将数据从 Java 发送到 C 根本不是问题,非常顺利。但是当我尝试从 C 写到 Java 时,TCP 消息直到我终止 C 程序(Ctrl + C)才到达那里,然后我可以在我的 Java 程序中看到该消息。

我尝试刷新标准输出和标准输入,但这也不起作用。

这是我应该写入 Javaclient 的 c 代码:

void *sendToGUI(struct SocketStruct *sockServer){
    char *msg = "Try to send to Java";
    int len, bytes_sent;
    len = strlen(msg);
    write(sockServer->javaSocket, msg, len);
}

该方法在线程中运行,接收方也在线程中运行。虽然,正如我所说,接收消息是没有问题的。

任何人都知道它可以是什么?

提前致谢!

【问题讨论】:

  • 请写Minimal Complete Verifiable Example。它将帮助您隔离问题,如果问题仍然存在,您可以在此处提问。
  • 谷歌TCP_NODELAY
  • 您应该保留并使用来自write(或send)的结果计数
  • 我确实尝试过使用 TCP_NODELAY,但不起作用。并且有一个来自 write 和 send 的结果 int,结果他们没有 -1。
  • 您是否有机会通过 WireShark 看到它发生的情况?它会让你确定问题出在哪一边。

标签: c multithreading sockets


【解决方案1】:

我怀疑 Java 代码正在读取行,而您没有发送行。在消息中添加行终止符。

【讨论】:

  • 非常感谢!我查看了 Wireshark,确实看到了程序之间的一些通信。问题出在Java(并且一直认为是C)。再次感谢您!
猜你喜欢
  • 2013-01-30
  • 1970-01-01
  • 1970-01-01
  • 2014-11-05
  • 1970-01-01
  • 2019-11-24
  • 1970-01-01
  • 2011-11-14
  • 2012-03-16
相关资源
最近更新 更多