在C语言中,单插座可以用于全双工通信吗?

在C语言中,单插座可以用于全双工通信吗?,c,sockets,C,Sockets,我正在编写一个点对点应用程序,其中两个客户端之间的连接必须是双工的,以便两个客户端能够同时发送和接收。可以使用单个插座还是需要使用两个插座?可以;据我所知,每个操作系统上的套接字都是全双工的——您可以同时发送和接收。然而,要实现真正的全双工通信,您必须确保应用程序在等待接收时可以传输-这意味着使用非阻塞IO和事件轮询(在Linux上有select和epoll,或者在windows上有WSAAsyncSelect或重叠IO)或者通过使用不同的线程进行发送和接收。谢谢您的回答。请详细说明如何进行发送

我正在编写一个点对点应用程序,其中两个客户端之间的连接必须是双工的,以便两个客户端能够同时发送和接收。可以使用单个插座还是需要使用两个插座?

可以;据我所知,每个操作系统上的套接字都是全双工的——您可以同时发送和接收。然而,要实现真正的全双工通信,您必须确保应用程序在等待接收时可以传输-这意味着使用非阻塞IO和事件轮询(在Linux上有
select
epoll
,或者在windows上有
WSAAsyncSelect
或重叠IO)或者通过使用不同的线程进行发送和接收。

谢谢您的回答。请详细说明如何进行发送和接收?如果客户端需要同时发送和接收,一个套接字将如何完成工作?问题是操作系统特定的。socket API对于多个OSIf I fork()进程是通用的,允许一个进程在使用单个套接字时进行传输,另一个进程进行接收,这样行吗?我的意思是,如果两个进程,一个发送,一个接收,使用同一个套接字,它能像双工一样工作吗?这是另一种选择,尽管在大多数情况下,使用多个进程来处理套接字上的不同方向比使用事件驱动或多线程模型更复杂,因为你还必须考虑这两个线程是如何相互通信的。对于前面的注释,我看到了相反的代码。与我遇到的一些单线程解决方案相比,使用单独的线程来处理读写操作可能要简单得多。