C# 在接收流之前等待服务器
我正试图在此基础上实现一个客户机-服务器套接字系统,我已经让它正常工作了。如果我这样做,当服务器立即返回字符串时,它就可以正常工作C# 在接收流之前等待服务器,c#,sockets,asynchronous,client-server,C#,Sockets,Asynchronous,Client Server,我正试图在此基础上实现一个客户机-服务器套接字系统,我已经让它正常工作了。如果我这样做,当服务器立即返回字符串时,它就可以正常工作 client.send(); client.receive(); 问题是,如果我的send方法请求的内容需要服务器几分钟才能处理,例如创建一个PDF版本的文件,那么receive调用会立即执行,但什么也没有收到(因为服务器在处理PDF文件时没有发送任何内容) 如何让客户端在执行receive方法之前等待一段时间,以便在服务器完成处理并发送文件后调用它?这似乎是阻塞
client.send();
client.receive();
问题是,如果我的send方法请求的内容需要服务器几分钟才能处理,例如创建一个PDF版本的文件,那么receive调用会立即执行,但什么也没有收到(因为服务器在处理PDF文件时没有发送任何内容)
如何让客户端在执行receive方法之前等待一段时间,以便在服务器完成处理并发送文件后调用它?这似乎是阻塞和非阻塞receive调用之间的区别。阻塞接收调用将等待,直到它实际有东西要接收,否则将超时。无论数据是否存在,非阻塞接收呼叫都会立即返回。我不知道这是什么叫法,但我知道C#有两种叫法 您给出的链接指向一个异步套接字示例,该示例通常与您尝试执行的操作不同。您试图做的更类似于同步样式 就套接字而言,异步通常意味着您将注册一个函数,以便在接收数据时调用。同步是指以阻塞或非阻塞方式轮询(显式请求数据) 编辑: 您可以发送数据,并设置一个类变量,表示您已发送了一些内容,并且希望收到一些内容。然后等待该变量被清除,表明您收到了一些信息
sent = 1
client.send()
while(sent);
然后,在接收回调中,当您实际获得某个内容时,您将设置该变量
/* receive data and process */
sent = 0;
使用async和wait。函数将在调用返回后被调用
正如spartacus所说,您似乎正在寻找的是同步服务器套接字。谢谢您的回复。如果我必须坚持使用async,那么当数据准备就绪时,我将如何取回数据?