从c 中的套接字返回值读取
Read from socket return value in c++
我需要从插座上强制read
的返回值,从而等于零,而无需关闭连接。
我在页面中阅读了以下语句,说:
如果收到文件终止条件或连接关闭,则返回0。
,但我不知道如何在我发送的字符串后获得该条件。
任何人可以帮忙吗?
我恐怕你不能那样做。
如果您希望read
返回零,则需要关闭套接字。如果您不想关闭插座,则需要作为协议的一部分发出信号"通信"或"通知"。
一种常见的方法是将每个消息的长度前缀。这样,接收方知道何时读取完整的消息并对它做任何事情。
如果要返回零,则必须关闭套接字或将其关闭以输出。无论哪种情况,您之后都无法发送其他任何内容。如果该约束不适合您,则必须修改您的要求,因为这是没有意义的。
"文件条件的结尾"answers"连接封闭"条件都告诉接收者,该插座上不再收到更多数据。您无法通过发送一些魔术数据来模拟这一点。
除了在套接字上调用close
外,您还可以使用套接字上的shutdown(2)
仅关闭阅读侧或写作侧。这可能在有限的情况下有助于,但在一般情况下没有帮助。
也许您需要一些多路复用syscall,例如poll(2)。
您绝对需要阅读一些好的材料,例如高级Linux编程或高级UNIX编程。
如果您需要TCP/IP传输来传输应用程序消息,则需要明确地关心包装和分裂(通过具有固定大小的消息,或者通过某种方法来了解传输过程中的逻辑消息大小)。请注意,TCP/IP传输可能会被网络分散。
相关文章:
- 从python中调用C++函数并获取返回值
- 为什么模板类中的对象不能返回值
- 返回值优化:显式移动还是隐式
- lock_guard是否保护返回值
- 调用CreateProcess()并获取字符串的返回值
- 如何使 windows 命令提示符在C++可执行文件上显示返回值?
- 编译器警告:执行到达值返回函数的末尾而不返回值
- 查找 GCD:并非所有控制路径都返回值
- 在 Arduino 上使用 sscanf 会导致与 const char * 不匹配,并且返回值始终相同,尽管输入值不同
- 将返回值存储在函数指针数组的指针中是如何工作的?
- 如何从 std::thread 返回值
- 将返回值从 exe 传递到 bat,并将其传递给 C# 中的进程
- 方法错误"not all control paths return a value"和方法不返回值
- 如何读取 C++ SAFEARRAY**,该 SAFEARRAY** 是 COM 互操作的结果,其中 C# 返回值为
- 对fread的返回值感到困惑
- 串行读取()不会在没有数据接收的情况下返回值
- 我想读取文本文件中的所有内容(但文本文件中只有一个双精度值),转换为双精度值并返回值
- 读取 Firebird 存储过程的返回值
- 如何从函数读取返回值
- 从c 中的套接字返回值读取