static Thread listenThread; // поток для прослушивания static void Main(string[] args) { Console.OutputEncoding = Encoding.GetEncoding(866); try { server = new Server(); listenThread = new Thread(new ThreadStart(server.Listen)); listenThread.Start(); //старт потока } catch (Exception ex) { server.Disconnect(); Console.WriteLine(ex.Message); } }
/// <summary> /// Method that gets called when new data comes in. Checks the length and sends it to datahandler /// </summary> /// <param name="ar">Incoming message</param> private void OnRead(IAsyncResult ar) { string messageData = ""; Boolean messageReady = false; try { int receivedBytes = stream.EndRead(ar); if (receivedBytes == 4) { //Do something with length byte messageLength = BitConverter.ToInt32(buffer, 0); Console.WriteLine("message length by length byte: {0}", messageLength); } else { string receivedText = Encoding.ASCII.GetString(buffer, 0, receivedBytes); totalBuffer += receivedText; Console.WriteLine("--New message. Length: {0} bytes. Text: {1}", receivedBytes, receivedText); messageData = receivedText; if (totalBuffer.Length == messageLength) { messageData = totalBuffer; messageReady = true; totalBuffer = totalBuffer.Remove(0); Console.WriteLine("Message complete: {0}", messageData); messageLength = 0; } } } catch (IOException) { Server.Disconnect(this); return; } if (messageReady) { Thread t = new Thread(DataHandling); t.Start(messageData); } Console.WriteLine("Begin reading again"); stream.BeginRead(buffer, 0, buffer.Length, OnRead, null); }