예제 #1
0
        public TCPClient()
        {
            TcpClient     client        = new TcpClient("127.0.0.1", 7575);
            NetworkStream networkStream = client.GetStream();

            bool done = false;

            Console.WriteLine("Type your name: ");
            string clientUserName = Console.ReadLine();

            CSUtil.SendMessage(networkStream, ("N^^M" + clientUserName));
            string nameOk = CSUtil.ReadMessage(networkStream);

            Console.WriteLine("Name status: " + nameOk);
            //Console.WriteLine("Type 'bye' to end connection");

            while (!done)
            {
                Console.Write("Enter a message to send to server: ");
                string message = Console.ReadLine();

                if (networkStream.DataAvailable)
                {
                    string messageR = CSUtil.ReadMessage(networkStream);
                    Console.WriteLine("message: " + messageR);
                    done = messageR.Equals("BYE");
                }
                //else
                //{
                //    string messageAnswer = Console.ReadLine();
                //    CSUtil.SendMessage(networkStream, (messageAnswer));
                //}
            }
        }
예제 #2
0
        static async Task HandleClientThread(object obj)
        {
            TcpClient     client        = obj as TcpClient;
            NetworkStream networkStream = client.GetStream();
            CTcpClient    cTcpClient    = new CTcpClient(client);

            bool done = false;

            try
            {
                while (!done) //&& client.Connected
                {
                    //Console.Out.WriteLine("while");
                    if (networkStream.DataAvailable)
                    {
                        Console.Out.WriteLine("data available");
                        Byte[] byteA = CSUtil.ReadObject(networkStream);
                        Console.Out.WriteLine($"Object type = '{byteA.GetType()}'");

                        if (byteA.GetType().ToString().Equals("System.Byte[]"))
                        {
                            Object objUnknown = CSUtil.ByteArrayToObject(byteA);
                            Console.Out.WriteLine($"Object3 type = '{objUnknown.GetType()}'");

                            //Checks which object it is
                            if (objUnknown.GetType().ToString().Equals("DP.DatumPrakker"))
                            {
                                DatumPrakker datumPrakker = (DatumPrakker)CSUtil.ByteArrayToObject(byteA);

                                datumPrakkers.Add(datumPrakker);
                                FileIO.WriteDPs();
                                Console.Out.WriteLine($"DatumPrakker: {datumPrakker}");
                            }
                            else if (objUnknown.GetType().ToString().Equals("DP.DatumPrakker+DPAnswer"))
                            {
                                DatumPrakker.DPAnswer dpAnswer = (DatumPrakker.DPAnswer)CSUtil.ByteArrayToObject(byteA);

                                foreach (DatumPrakker p in datumPrakkers)
                                {
                                    if (p.id.Equals(dpAnswer.dpID))
                                    {
                                        p.answers.Add(dpAnswer);
                                        FileIO.WriteDPs();
                                    }
                                }

                                Console.Out.WriteLine($"DPAnswer: {dpAnswer}");
                            }
                            else if (objUnknown.GetType().ToString().Equals("System.String"))
                            {
                                String s = (String)CSUtil.ByteArrayToObject(byteA);
                                Console.Out.WriteLine($"String: {s}");

                                if (s.StartsWith("bye"))
                                {
                                    networkStream = null;
                                    client.Close();
                                    Console.WriteLine($"client.Connected: {client.Connected}");
                                    Console.WriteLine($"client '{cTcpClient.userName}' Disconnected");
                                    done = true;
                                    break;
                                }
                                else if (s.StartsWith("N^^M"))
                                {
                                    cTcpClient.userName = s.Remove(0, 4);
                                    Console.WriteLine($"Accepted {cTcpClient.userName}");
                                    //CSUtil.SendMessage(networkStream, "OK Name");
                                    networkStream.Flush();
                                }
                                else if (s.StartsWith("GETDP"))
                                {
                                    String dpID  = s.Remove(0, 5);
                                    bool   found = false;

                                    Console.Out.WriteLine($"getDP {dpID}");

                                    foreach (DatumPrakker dp in datumPrakkers)
                                    {
                                        if (dp.id.Equals(dpID))
                                        {
                                            found = true;
                                            CSUtil.SendObject(networkStream, dp);
                                            Console.Out.WriteLine($"DP '{dpID}' sended to {cTcpClient.userName}");
                                        }
                                    }

                                    if (!found)
                                    {
                                        CSUtil.SendObject(networkStream, "DPGET-NOTFOUND");
                                    }
                                }
                                else
                                {
                                    Console.Out.WriteLine(s);
                                }
                            }
                            else
                            {
                                Console.Out.WriteLine($"UnknownObject is Unknown: '{objUnknown.GetType()}'");
                            }
                        }
                    }
                }
            }
            catch (IOException e)
            {
                if (!client.Connected)
                {
                    Console.WriteLine($"client.Connected: {client.Connected}");
                    Console.WriteLine($"client '{cTcpClient.userName}' Disconnected");
                    client.Close();
                }
                else
                {
                    Console.WriteLine(e);
                }
                //throw;
            }
        }