2013-03-29 60 views
0

我试图实现一个基于此MSDN article的客户端服务器套接字系统,我让它工作。如果我这样做,它可以正常工作,当服务器立即返回一个字符串。在接收流之前等待服务器

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

的问题是,如果我的发送方法要求的东西都在服务器几分钟的时间来处理,比如创建文件的PDF版本中,收到呼叫后直接执行,并接受什么(因为服务器不是招由于它仍在处理PDF,因此不会发送任何内容)。

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

+0

斯巴达克斯说,你似乎在寻找什么是同步服务器的套接http://msdn.microsoft.com/en-us/library/6y0e13d3.aspx – stevebot

回答

2

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

您给出的链接是一个异步套接字示例,它与您尝试执行的操作通常不同。你试图做的是更类似于同步风格。

在套接字方面的异步通常意味着你将注册一个函数,当数据被接收时被调用。同步意味着以阻塞或非阻塞的方式轮询(明确要求数据)。

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

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

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

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

谢谢您的答复。如果我必须坚持使用异步,那么在准备好后如何获取数据? – Moleman

相关问题