Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Client Server ( Глючит код, не понятно почему )


Автор: 56illusion 10.6.2010, 17:11
Привет. Я в первые решил заняться программированием TCP . решил написать клиент и сервер.
Вот только чтото не так в етом коде.. странно всё както.. соединение есть, клиент посылает инфу а сервер вроде получает только
не отображаеться строка  текста и т.д
Проверьте ктонибуть у себя, я знаю что мало кому будет дело до моей просьбы, но всётаки присмотритесь к самому коду. может ошибка или не правельно написано всё???
Спасибо


Клиент

Код

 class Program
    {
        private string UserData;
        private byte[] Data = { };
        private TcpClient User;
        private Socket Sock;
        private const string ServerIP = "127.0.0.1";
        private const int Port = 5555;

        static void Main(string[] args)
        {
            Program This = new Program();
            This.User = new TcpClient();
            Console.WriteLine("Connecting to server...");
            try { This.User.Connect(ServerIP, Port); }
            catch
            {
                Console.WriteLine("Connection failed");
                return;
            }
            This.Sock = This.User.Client;
            Console.WriteLine("Socket have buil");
            while (true)
            {
                Console.WriteLine("Write your massage:");
                Console.WriteLine(">");
                This.UserData = Console.ReadLine();
                if (This.UserData == "END") break;
                This.Sock.Send(Encoding.ASCII.GetBytes(/*This.UserData*/ "Helo"));
                This.Sock.Receive(This.Data);
                Console.WriteLine("<" + Encoding.ASCII.GetString(This.Data));
            }
            This.Sock.Close();
            This.User.Close();        
        }
    }


Сервер

Код


class Program
    {
        static void Main(string[] args)
        {
            const int listenPort = 5555;
            string smd;
            ServerThread serv = new ServerThread();
            serv.CreatThread(listenPort);
            while (true)
            {
                smd = Console.ReadLine();
            }
        }
    }

    class ServerThread
    {
        private int Localport;
        private Thread ServThread;
        private TcpListener Listener;

        public void CreatThread(int Port)
        {
            this.Localport = Port;
            this.ServThread = new Thread(new ThreadStart(StartServerThread));
            this.ServThread.Start();
        }

        private void StartServerThread()
        {
            Socket ClientsSock;
            string ServerData;
            byte[] data = { };

            Listener = new TcpListener(new System.Net.IPEndPoint(System.Net.IPAddress.Parse("127.0.0.1"), 5555));
            Listener.Start();
            Console.WriteLine("Waiting to Connection...");
            try { ClientsSock = Listener.AcceptSocket(); Console.WriteLine("Socket Accept"); }
            catch { this.ServThread.Abort(); return; }

            int i = 0;

            if (ClientsSock.Connected)
            {
                while (true)
                {
                    //try { i = ClientsSock.Receive(data); }
                    //catch { }
                    try
                    {
                        //if (i > 0)
                        //{
                            Console.WriteLine("Incomming massage...");
                            ClientsSock.Receive(data);
                            ServerData = Encoding.ASCII.GetString(data).Trim();
                            Console.WriteLine("<" + ServerData);
                            Console.WriteLine(">");
                            ClientsSock.Send(Encoding.ASCII.GetBytes(/*Console.ReadLine()*/ "helom"));
                        //}
                    }
                    catch
                    {
                        ClientsSock.Close();
                        Listener.Stop();
                        Console.WriteLine("Server closing");
                        ServThread.Abort();            
                    }
                }
            }
        }

    }





Автор: Sartorius 10.6.2010, 17:36
А что может прочитаться в массив нулевой длинны ?
Код

byte[] data = {};

Автор: 56illusion 10.6.2010, 18:08
Ок спасибо... Исправил и сообщение показываеться.. но только один раз всё нормально а если второй раз чёто послать с сервера или клиента на вторую сторону то опять глюки...
моя цель написать систему клинт сервера в которой клиент будет посылать разновидную текстовую информацию серверу, каждый определённый промежуток времени... а сервер только иногда будет посылать разные команды или типо сигналы клиенту в текстовом виде...

Автор: 56illusion 14.6.2010, 21:07
Куку... ктонибуть поможет???

Автор: Exai1e 14.6.2010, 21:59
56illusion, обязательно использовать сокеты ?
может быть стоит взглянуть к примеру на WCF ?
http://www.techdays.ru/videos/1102.html

Автор: 56illusion 15.6.2010, 11:14
спасибо за совет. а ета технология вроде легче в плане понимание чем та где используют сокеты?

Автор: Exai1e 15.6.2010, 21:18
Цитата(56illusion @  15.6.2010,  11:14 Найти цитируемый пост)
спасибо за совет. а ета технология вроде легче в плане понимание чем та где используют сокеты? 

она более удобна в использовании, более перспективна, посмотрите, может быть это то что вам нужно smile
имхо: "голые" сокеты, не всегда лучшее решение
Посмотрите видео, поищите доки/статьи, довольно удобная технология на мой взгляд. А уж что использовать - решать только вам.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)