我想创建一个简单的聊天应用程序,其中没有用于连接和路由其数据的通用服务器。但是,我不知道如何轮流操作,这对于聊天程序来说很奇怪。

我以为我可以进行多线程处理,但是到目前为止我发现的信息只是关于与客户端请求有关的线程处理(绕过客户端队列的事情)。我绝对没有尝试过多线程。我也不知道这是否是唯一的方法。我也尽管做了一些事件驱动的程序,但是我无法使ncurses在VS上工作(它成功地链接和编译了,但是库本身似乎有问题)。

因此,基本上我该如何制作聊天程序而不轮流使用。毕竟,调用recv()一直保持到接收到某些东西为止,因此在这段时间内,我无法调用任何stdin函数。

最佳答案

使用事件循环。

1)有什么事吗?

2)如果是,请处理。

3)如果没有,请等待某些事情发生或等待一段时间。

4)转到步骤1。

现在,您只需要使所有可能发生的事情(例如套接字上接收到的数据)成为您可以在步骤3中等待的事件。对于套接字,您可以使用WSAEventSelect进行操作。您可以使用WaitForMultipleEvents等待事件。

另外,您可以安排使用WSAAsyncSelect在套接字上接收到数据时,使Winsock向Windows程序发送Windows消息。

关于c - 同时执行recv()和send()winsock,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8707993/

10-10 07:25