如何在c ++ socket tcp / ip中异步发送和接收数据和确认?

时间:2011-11-15 10:29:59

标签: c++ sockets tcp

如何在c ++ socket tcp / ip?中异步发送和接收数据和确认,我可以在我的程序中看到,当发送一些145字节的数据50次时,我将收到前六个的确认,因为它需要时间给予确认。我已经尝试等待,直到我收到当前发送数据的确认,但这需要很长时间,我不想这样做。我想处理数据。所以我认为我会把接收放在一个单独的线程中。我想在发送过程中同时处理接收?那么异步接收会起作用吗?有人可以帮忙吗?我用来接收和发送数据的类是静态类。因为我需要从另外两个类调用将数据发送到同一个ip和端口。

2 个答案:

答案 0 :(得分:1)

您可以使用套接字在一个线程中发送数据,并同时在另一个线程中接收数据。你不能做的事情是在不同线程的同一个套接字上执行相同的操作(发送或接收)。

然而,如果不必要,总是尽量避免添加新线程。您可以使用一些套接字函数(selectWSAEventSelect),它们会在您对套接字执行读/写操作时通知您。将它们放在单个线程的循环中,等待事件并处理它们 - 在同一个线程中读/写。如果您需要处理接收的数据并且需要时间,请将接收到的数据存储在与另一个数据处理线程共享的队列中。当然,请记住,您需要使此队列成为线程安全的,并同步套接字和数据处理线程。

答案 1 :(得分:0)

如果在Posix系统上,您可能需要多路复用系统调用,如pollppollpselectselect

如果您的系统是非Posix(例如Windows),您应该找到一些类似的功能,或使用线程。