【问题标题】:How to open socket for sending data only in linux如何仅在 linux 中打开用于发送数据的套接字
【发布时间】:2015-09-13 00:30:29
【问题描述】:

如何打开一个套接字来发送数据或接收数据? 如果你想用socket发送数据,那个socket不会收到任何数据。

有没有可用的套接字选项?

【问题讨论】:

  • 互联网上有很多关于如何创建和使用套接字的教程,各种语言。使用谷歌搜索。至于使套接字单向(在 C 或 C++ 中),请参阅 Martijns 答案。

标签: linux sockets


【解决方案1】:

如果发送方和接收方进程在同一台机器上,您可以使用pipe 代替套接字,请参阅pipe(2) 手册页了解其工作原理。

如果这是通过网络进行通信,您可以只使用套接字而不发送数据。如果你想确定,你可以使用shutdown(fd, SHUT_RD)来关闭你的socket的写入部分。

【讨论】:

  • 虽然在这种情况下使用SHUT_RD,因为 OP 只想发送而不是接收。
  • 咳咳。哎呀。固定的。 (喝咖啡的时间:)
  • 感谢您的回答。但我在打开套接字时使用 SOCK_DGRAM 数据包。当我使用 shutdown() 调用时,它会引发错误“传输端点未连接”。我的通信是通过网络进行的。请解释解决方案。在此先感谢。
  • 在这种情况下,不要在套接字文件句柄上调用发送(或接收)调用 :)
【解决方案2】:

使用unix域socket,不要绑定:

fd = socket(PF_LOCAL, SOCK_DGRAM, 0);

然后你可以使用套接字发送,但是没有人能够向套接字发送数据。 甚至接收者也无法响应。

【讨论】:

    【解决方案3】:

    如果这是为了通过网络进行通信,并且您想确保这是一个只写套接字,您可以使用 shutdown(fd, SHUT_RD) 关闭套接字的写入部分。 如果这是一个 SOCK_DGRAM - 一个 UDP 套接字,请使用 connect() 连接到远程对等点,然后调用 shutdown()。 shutdown() 关闭连接的套接字。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-05
      • 2021-08-20
      • 1970-01-01
      • 2015-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-26
      相关资源
      最近更新 更多