Beispiel #1
0
        void sent(System.Net.Sockets.Socket socket, statesaver stdsav)
        {
            string sentstr = String.Empty;

            byte[] buffer = new byte[1024 * 1024];
            while (true)
            {
                Thread.Sleep(socketfreq);
                if (sentmsg.Count >= 1 && stdsav.set(9) == 1)
                {
                    sentstr = sentmsg.Dequeue() as string;
                    buffer  = Encoding.UTF8.GetBytes(sentstr);
                    try{
                        socket.Send(buffer);
                    }
                    catch (Exception)
                    {
                        Writered("\n\nConnection Failed");
                        while (true)
                        {
                        }
                    }
                }
            }
        }
Beispiel #2
0
        public void chatlaunch(System.Net.Sockets.Socket socket)
        {
            statesaver  stdsav = new statesaver();
            stringclass str    = new stringclass();
            Thread      showth = new  Thread(() => show(str, socket, stdsav));

            showth.Start();
            Thread inputth = new  Thread(() => input(str, socket, stdsav));

            inputth.Start();
            Thread sentth = new  Thread(() => sent(socket, stdsav));

            sentth.Start();
            Thread recvth = new  Thread(() => recv(socket, stdsav));

            recvth.Start();
        }
Beispiel #3
0
        void show(stringclass str, System.Net.Sockets.Socket socket, statesaver stdsav)
        {
            string recvstr = String.Empty;

            while (true)
            {
                Thread.Sleep(200);

                if (recvmsg.Count >= 1)
                {
                    recvstr = recvmsg.Dequeue() as string;


                    int forn;
                    for (forn = 0; forn <= (str.set(@"@#").Length + 11); forn++)
                    {
                        Console.Write('\u0008');
                    }
                    for (forn = 0; forn <= (str.set(@"@#").Length + 11); forn++)
                    {
                        Console.Write(" ");
                    }
                    for (forn = 0; forn <= (str.set(@"@#").Length + 11); forn++)
                    {
                        Console.Write('\u0008');
                    }
                    //			Console.WriteLine("");
                    if (recvstr == @"$%$filereq")
                    {
                        stdsav.set(0);
                        Console.WriteLine("Recv   => " + "FILE");
                        filerecvlaunch(socket);
                        //					Console.WriteLine("-------------------------------------------------set state to 1");
                        stdsav.set(1);
                    }
                    if (recvstr != @"$%$filereq")
                    {
                        Console.WriteLine("Recv   => " + recvstr);
                    }
                    Console.Write("Edit   => " + str.set(@"@#"));
                }
            }
        }
Beispiel #4
0
        void recv(System.Net.Sockets.Socket socket, statesaver stdsav)
        {
            string recvstr = String.Empty;

            byte[] buffer  = new byte[1024 * 1024];
            int    n       = 1;
            int    working = 1;

            while (working == 1)
            {
                Thread.Sleep(socketfreq);
                while (stdsav.set(9) == 0)
                {
                    Thread.Sleep(200);
                }
                try{
                    if (stdsav.set(9) == 1)
                    {
                        //---------------------------------------------------------------------------------------问题等待解决:此receive抢包问题:进去时还是1,抢包时是0
                        //---------------------------------------------------------------------------------------目前代替方案:$%$recv/accpet包将会发送两次,
                        //----------------------------------------------------------------------------------------------------下18行左右有内码包过滤代码,如解决,需删除
                        n = socket.Receive(buffer);
                        //			Console.WriteLine("-----Received    with code "+stdsav.set(9).ToString());
                    }
                }
                catch (Exception)
                {
                    Writered("\n\nConnection Failed");
                    while (true)
                    {
                    }


                    working = 0;
                }
                recvstr = Encoding.UTF8.GetString(buffer, 0, n);
                if (recvstr != @"$%$accepted" && recvstr != @"$%$refused")
                {
                    recvmsg.Enqueue((object)recvstr);
                }
            }
        }
Beispiel #5
0
        void input(stringclass str, System.Net.Sockets.Socket socket, statesaver stdsav)
        {
            Console.Write("Edit   => ");
            while (true)
            {
                char inputchar = Console.ReadKey().KeyChar;
                if (inputchar != '\r')
                {
                    str.set(str.set(@"@#") + inputchar);
                }
                if (inputchar == '\r')
                {
                    //		if(inputstr!=String.Empty)
                    //		{
                    if (str.set(@"@#") == filesendkeyword)
                    {
                        stdsav.set(0);
                        Console.WriteLine("Sent   => " + "FILE");
                        filesendlaunch(socket);
                        //					Console.WriteLine("-------------------------------------------------set state to 1");
                        stdsav.set(1);
                    }
                    if (str.set(@"@#") != filesendkeyword)
                    {
                        Console.WriteLine("Sent   => " + inputstr);
                    }
                    sentmsg.Enqueue((object)str.set(@"@#"));



                    //		}
                    //		if(inputstr==String.Empty)
                    //		{
                    //			Console.WriteLine("--空内容--\n");
                    //		}

                    str.set(String.Empty);
                    Console.Write("Edit   => ");
                }
            }
        }