【发布时间】:2015-09-13 00:30:29
【问题描述】:
如何打开一个套接字来发送数据或接收数据? 如果你想用socket发送数据,那个socket不会收到任何数据。
有没有可用的套接字选项?
【问题讨论】:
-
互联网上有很多关于如何创建和使用套接字的教程,各种语言。使用谷歌搜索。至于使套接字单向(在 C 或 C++ 中),请参阅 Martijns 答案。
如何打开一个套接字来发送数据或接收数据? 如果你想用socket发送数据,那个socket不会收到任何数据。
有没有可用的套接字选项?
【问题讨论】:
如果发送方和接收方进程在同一台机器上,您可以使用pipe 代替套接字,请参阅pipe(2) 手册页了解其工作原理。
如果这是通过网络进行通信,您可以只使用套接字而不发送数据。如果你想确定,你可以使用shutdown(fd, SHUT_RD)来关闭你的socket的写入部分。
【讨论】:
SHUT_RD,因为 OP 只想发送而不是接收。
使用unix域socket,不要绑定:
fd = socket(PF_LOCAL, SOCK_DGRAM, 0);
然后你可以使用套接字发送,但是没有人能够向套接字发送数据。 甚至接收者也无法响应。
【讨论】:
如果这是为了通过网络进行通信,并且您想确保这是一个只写套接字,您可以使用 shutdown(fd, SHUT_RD) 关闭套接字的写入部分。 如果这是一个 SOCK_DGRAM - 一个 UDP 套接字,请使用 connect() 连接到远程对等点,然后调用 shutdown()。 shutdown() 关闭连接的套接字。
【讨论】: