예제 #1
0
 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);
     }
 }
예제 #2
0
        /// <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);
        }