Moleman
Moleman

Reputation: 87

Wait for server before receiving stream

I'm trying to implement a client-server socket system based on this MSDN article and I have it working. If I do this it works fine when the server is returning a string immediately.

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

The problem is if my send method requests something that takes the server a few minutes to process, such as creating a PDF version of a file, the receive call executes straight after and receives nothing (because the server hasn't sent anything as it's still processing the PDF).

How can I make the client wait for a certain period of time before executing the receive method so that it's called once the server has finished processing and has sent the file?

Upvotes: 0

Views: 1150

Answers (2)

spartacus
spartacus

Reputation: 613

This seems to be the difference between a blocking and non-blocking receive call. A blocking receive call would wait until it actually had something to receive or it would timeout. A non-blocking receive call would return right away whether data is present or not. I don't know what call this is but I know C# has both types of calls.

The link you gave was to a asynchronous socket example which is generally different than what you are trying to do. What you are trying to do is more similar to a synchronous style.

Asynchronous in terms of sockets usually means you would register a function to be called when data was received. Synchronous means to poll (explicitly ask for data) in either a blocking or non-blocking manner.

EDIT: You would send your data and set a class variable saying you have sent something and are expecting to receive something. Then wait for that variable to be cleared saying you've received something.

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

Then in your receive callback when you actually get something you would set that variable.

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

Upvotes: 2

iefpw
iefpw

Reputation: 7062

Use async and wait. The function will get called after the call returns.

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

Upvotes: 0

Related Questions