0

我正在尝试基于这篇MSDN 文章实现一个客户端-服务器套接字系统,并且我已经让它工作了。如果我这样做,当服务器立即返回一个字符串时它工作正常。

client.send();
client.receive();

问题是如果我的 send 方法请求服务器需要几分钟才能处理的内容,例如创建文件的 PDF 版本,则接收调用会立即执行并且什么也没有收到(因为服务器没有发送任何内容,因为它仍然处理 PDF)。

如何让客户端在执行接收方法之前等待一段时间,以便在服务器完成处理并发送文件后调用它?

4

2 回答 2

2

这似乎是阻塞和非阻塞接收调用之间的区别。一个阻塞的接收调用会一直等到它实际上有东西要接收或者它会超时。无论数据是否存在,非阻塞接收调用都会立即返回。我不知道这是什么调用,但我知道 C# 有这两种调用。

您提供的链接是异步套接字示例,该示例通常与您尝试执行的操作不同。您尝试做的更类似于同步风格。

就套接字而言,异步通常意味着您将注册一个在接收到数据时要调用的函数。同步意味着以阻塞或非阻塞方式轮询(显式请求数据)。

编辑: 你会发送你的数据并设置一个类变量,说你已经发送了一些东西并期待收到一些东西。然后等待那个变量被清除,说你收到了一些东西。

sent = 1
client.send()
while(sent);

然后在你的接收回调中,当你真正得到一些东西时,你会设置那个变量。

/* receive data and process */
sent = 0;
于 2013-03-29T18:07:58.360 回答
0

使用异步并等待。该函数将在调用返回后被调用。

http://msdn.microsoft.com/en-us/library/vstudio/hh156513.aspx

于 2013-03-29T18:15:43.733 回答