在接收流之前等待服务器

时间:2013-03-29 18:01:55

标签: c# sockets asynchronous client-server

我正在尝试基于此MSDN article实现客户端 - 服务器套接字系统,并且我正在使用它。如果我这样做,它会在服务器立即返回字符串时正常工作。

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

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

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

2 个答案:

答案 0 :(得分:2)

这似乎是阻止和非阻塞接收呼叫之间的区别。阻塞接收呼叫将等到它实际上有东西要接收或它会超时。无论数据是否存在,非阻塞接收呼叫都会立即返回。我不知道这是什么电话,但我知道C#有两种类型的电话。

您提供的链接是一个异步套接字示例,该示例通常与您尝试的不同。你要做的是更类似于同步风格。

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

修改 你会发送你的数据并设置一个类变量,说你已经发送了一些东西,并期望收到一些东西。然后等待清除该变量,说明你收到了一些东西。

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

然后在你接收回调时,当你真正得到某些东西时,你会设置该变量。

/* receive data and process */
sent = 0;

答案 1 :(得分:0)

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

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