Thursday 15 September 2011

Response from asynchronous server to asynchronous client is NULL in C# -



Response from asynchronous server to asynchronous client is NULL in C# -

i have asynchronous communication between client , server. when client receives response server (receivecallback), response stored in public static string response in networkhandler class. trying utilize field in gamehandler class, says response empty. sure buffer in networkhandler not empty, because checked it.

i think happens because networkhandler.response called before response gets value, not sure , don't know how solve it...

see comments in code more explanation...

please take @ image see null value in gamehandler: http://i.imgur.com/bpvdlhf.png , here see right value in networkhandler: http://i.imgur.com/vfy2iud.png

class networkhandler { public static string response = string.empty; private static void receivecallback(iasyncresult ar) { socket remote = (socket)ar.asyncstate; int received = remote.endreceive(ar); byte[] databuffer = new byte[received]; array.copy(_buffer, databuffer, received); string serverdata = encoding.ascii.getstring(databuffer); response = serverdata; } private static void sendcallback(iasyncresult ar) { socket remote = (socket)ar.asyncstate; int sent = remote.endsend(ar); remote.beginreceive(_buffer, 0, _size, socketflags.none, new asynccallback(receivecallback), remote); } public static void senddata(string data) { byte[] message = encoding.ascii.getbytes(data); _client.beginsend(message, 0, message.length, socketflags.none, new asynccallback(sendcallback), _client); } private static void connectcallback(iasyncresult ar) { _client = (socket)ar.asyncstate; seek { _client.endconnect(ar); _client.beginreceive(_buffer, 0, _size, socketflags.none, new asynccallback(receivecallback), _client); } grab (socketexception e) { console.writeline(e.tostring()); } } } class gamehandler { public void startgame() { // send info using beginsend() senddata("<sg>"); // value null!!! :( _response = networkhandler.response; // code within if not executed :( if (_response != null) { // if drawer. if (_response.substring(0, 5) == "<dra>") etc......... } } public void senddata(string data) { networkhandler.senddata(data); } }

c# asynchronous tcp client server

No comments:

Post a Comment