【发布时间】:2012-02-19 17:35:45
【问题描述】:
我用 C++ 编程已经有一段时间了,但我是网络编程的初学者,我对一些事情还不清楚,所以这是一个由三部分组成的问题。
在示例应用程序中,我看到在一个套接字上调用 send(),检查其返回值,然后立即在同一个套接字上调用 recv()。但是我觉得这很令人困惑,因为直到在 send() 之后才调用 recv(),所以在调用 recv 之前没有回复消息到达的风险吗?如果是这样,这实际上是一个问题,还是消息会一直处于不确定状态,直到调用 recv 并收到它?
我希望编写一个与服务器通信的类,它可以向服务器发出几种不同类型的请求,每个请求都有一个函数,它发送请求然后等待回复。我的客户将拥有此类的一个实例作为成员。鉴于 send() 和 recv() 正在阻塞调用,即使我为网络通信创建了一个单独的线程,如何在等待对一个请求的回复时停止所有网络通信?如果一条消息失败,那么直到发送/接收超时,我将无法再发出任何请求,那么每个客户端是否需要多个套接字?不止一个线程?
我一直在阅读有关线程安全的文章,鉴于 send 和 recv 是阻塞调用,我假设如果每个客户端只有一个线程用于网络通信,我的应用程序将是线程安全的,但是如果我确实需要超过每个客户端一个线程或多个套接字(我还不知道),我将如何使其线程安全?
抱歉,拖了这么久。 谢谢。
【问题讨论】:
标签: .net multithreading network-programming thread-safety winsock