c# - Async Tcp Server cannot receive data -


i tyring create multi threading , async tcp server implements tcpl listener

current server working intended able send data server transmit data client out problems

however after have sent data server , sent data client, when client sends data server again server unabe pick data

i have tried days find answer problem no luck

here code using in server:

using system; using system.collections.generic; using system.linq; using system.text; using system.net; using system.net.sockets; using system.threading; using system.windows.forms; using system.io;  namespace mytcpasyncclass {     public class stateobject     {         public tcpclient mytcpclient = null;         public networkstream mynetworkstream = null;         public const int mybuffersize = 1024;         public byte[] mybuffer = new byte[mybuffersize];         public string requeststring = "";         public stringbuilder mystringbuilder = new stringbuilder();         char[] requestchars; // char array of request         const char stx = (char)0x02; // start character         const char ftx = (char)0x03; // finish character          public void dispose()         {             try             {                 mytcpclient.close();                 mynetworkstream.close();                 mynetworkstream.dispose();             }             catch (exception ex)             {                 messagebox.show("message:\n" + ex.message + "\n\nstacktrace:\n" + ex.stacktrace);             }         }     }      public static class asyncserverfunctions     {         private static int mport = 0;          private static manualresetevent mymanualresetevent = new manualresetevent(false);          public static void startlistening()         {               //catch tcp client connection             try             {                 //get database connection                 //myreaderwriterlockslim.enterreadlock();                 loadsettings();                 //myreaderwriterlockslim.exitreadlock();                  tcplistener mytcplistener = new tcplistener(ipaddress.any, mport);                 mytcplistener.start();                  while (true)                 {                     //set event nonsignaled state                     mymanualresetevent.reset();                      //start asynchronous tcplistener listen connection                     mytcplistener.beginaccepttcpclient(accepttcpclientcallback, mytcplistener);                      //wait until connection made before continuing                     mymanualresetevent.waitone();                 }                  mytcplistener.stop();             }             catch (exception ex)             {                 adderrorlog(ex.message, ex.stacktrace);             }         }          private static void accepttcpclientcallback(iasyncresult result)         {             try             {                 //beginaccepttcpclientcallback                 //signal main thread continue                 mymanualresetevent.set();                 //get tcpclientnetworkstream:                 tcplistener mytcplistener = (tcplistener)result.asyncstate;                  //finish async client process                 tcpclient mytcpclient = mytcplistener.endaccepttcpclient(result);                 stateobject mystateobject = new stateobject();                 mystateobject.mytcpclient = mytcpclient;                 mystateobject.mynetworkstream = mytcpclient.getstream();                  //begin async read networkstream                 mystateobject.mynetworkstream.beginread(mystateobject.mybuffer, 0, stateobject.mybuffersize, new asynccallback(beginreadcallback), mystateobject);             }             catch (exception ex)             {                 adderrorlog(ex.message, ex.stacktrace);             }         }          private static void beginreadcallback(iasyncresult result)         {             stateobject mystateobject = (stateobject)result.asyncstate;             networkstream mynetworkstream = mystateobject.mynetworkstream;             string myrequeststring = "";               try             {                 //get request data here                  if (mystateobject.mybuffer.length > 0)                 {                     //store data recived                     mystateobject.mystringbuilder.clear();                     mystateobject.mystringbuilder.append(encoding.ascii.getstring(mystateobject.mybuffer));                      //get stored request string                     myrequeststring = mystateobject.mystringbuilder.tostring();                      //record string recived                     databasefunctions.addmessagelog("string recived (beginreadcallback): " + myrequeststring);                      //remove first , last character                     myrequeststring = cleanstring(myrequeststring);                      //record request string                     databasefunctions.addmessagelog("request string recived:" + myrequeststring);                      //get message identifier                     string messageidentifier = "";                     messageidentifier = myrequeststring.substring(0, 2);                      switch (messageidentifier)                     {                         case "value":                             sendresponse(mystateobject, startup(messageidentifier, myrequeststring));                             sendresponse(mystateobject, sendtransactionstart(messageidentifier, myamount));                             getresponse(mystateobject);                             break;                         default:                             //***default case***                             sendresponse(mystateobject, defaultcase(myrequeststring));                             break;                     }                      //dispose of connection                     mystateobject.dispose();                 }             }             catch (exception ex)             {                 adderrorlog(ex.message, ex.stacktrace);                 try                 {                     mystateobject.dispose();                 }                 catch                 {                     adderrorlog(ex.message, ex.stacktrace);                 }             }         }          private static void sendresponse(stateobject pmystateobject, string presponsestring)         {             try             {                 //send response client                 //get bytes string sent                 byte[] myresponsebytes = encoding.ascii.getbytes(presponsestring);                 //get network stream                 networkstream mynetworkstream = pmystateobject.mynetworkstream;                 //call sendresponsecallback                 mynetworkstream.beginwrite(myresponsebytes, 0, myresponsebytes.length, new asynccallback(sendresponsecallback), pmystateobject);             }             catch (exception ex)             {                 adderrorlog(ex.message, ex.stacktrace);             }         }          private static void getresponse(stateobject pstateobject)         {             //this run new asynccallback response client             networkstream mynetworkstream = pstateobject.mynetworkstream;             pstateobject.mybuffer = new byte[1024];             mynetworkstream.beginread(pstateobject.mybuffer, 0, pstateobject.mybuffer.length, new asynccallback(beginreadcallback), pstateobject);         }           private static void sendresponsecallback(iasyncresult result)         {             try             {                 //end send procedure                 stateobject mystateobject = (stateobject)result.asyncstate;                 networkstream mynetworkstream = mystateobject.mynetworkstream;                 mynetworkstream.flush();             }             catch (exception ex)             {                 adderrorlog(ex.message, ex.stacktrace)             }         }          private static void showexceptionmessage(string pmessage, string pstacktrace)         {             messagebox.show("message:\n" + pmessage + "\n\nstacktrace:\n" + pstacktrace);         }          private static void adderrorlog(string pmessage, string pstacktrace)         {             databasefunctions.addmessagelog("message:" + pmessage + "; stacktrace:" + pstacktrace);         }     } } 

thanks all

you should call beginaccepttcpclient in accepttcpclientcallback also. don't accept new connection after first one.


Comments

Popular posts from this blog

java - Play! framework 2.0: How to display multiple image? -

gmail - Is there any documentation for read-only access to the Google Contacts API? -

php - Controller/JToolBar not working in Joomla 2.5 -