Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.01.2014, 22:14   #1
VadimKhamutov
Пользователь
 
Регистрация: 05.01.2014
Сообщений: 11
Восклицание Помогите закончить клиент и сервер чата

Здравствуйте, ув. участники форума!
Я учу данный ЯП, с помощью Ютьюб-а написал код для сервера и клиента, но тут загвоздочка: автор не выпустил финальной части, да и вряд ли выпустит Помогите закончить его, пожалуйста
Вот, собственно, код:
Клиент:
Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Threading;
using System.Net.Sockets;
using System.Net;
using System.IO;

namespace Networking
{
   public class ClientManager
    {
       public string IP { get; set; }
       public int Port { get; set; }
       private TcpClient Client;
       private NetworkStream NetworkStream;
       private delegate void ReceiveDataEventHandler(byte[] data);
       private event ReceiveDataEventHandler OnReceiveData;


       public ClientManager(string ip, int port)
       {
           IP = ip;
           Port = port;
           Client = new TcpClient();
       }

       public void Connect()
       {
           try
           {
               Client.Connect(new IPEndPoint(IPAddress.Parse(IP), Port));
               NetworkStream = Client.GetStream();
               Thread thrdReceive = new Thread(new ThreadStart(ReceiveServerData));
               thrdReceive.Start();
           }
           catch (Exception ex)
           {
               Console.WriteLine("Error : " + ex.ToString());
           }
       }

       private void ReceiveServerData()
       {
           try
           {
               int buffersize;
               byte[] databuffer;

               while (true)
               {
                   databuffer = new byte[1048];
                   buffersize = NetworkStream.Read(databuffer, 0 , databuffer.Length);

                   if(OnReceiveData != null) OnReceiveData(databuffer);
               }
           }
           catch (Exception ex)
           {
               Console.WriteLine("Error : " + ex.ToString());
           }

           }

    }
}



P.S. Учусь по учебнику Шилдта
VadimKhamutov вне форума Ответить с цитированием
Старый 05.01.2014, 22:15   #2
VadimKhamutov
Пользователь
 
Регистрация: 05.01.2014
Сообщений: 11
По умолчанию

Сервер :
Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Threading;
using System.Net.Sockets;
using System.Net;
using System.IO;

namespace Networking
{
   public class ServerManager
    {
       public int Port { get; set; }
       private TcpListener Listener;
       private List<TcpClient> Clients;
       private List<NetworkStream> NetworkStream;
       private delegate void ReceiveDataEventHandler(int clientid, byte[] data);
       private delegate void ConnectEventHandler(int clientid);
       private event ReceiveDataEventHandler OnReceiveData;
       private event ConnectEventHandler OnClientConnect;
       

        public ServerManager(int port)
        {
            Port = port;
            Listener = new TcpListener(new IPEndPoint(IPAddress.Any, Port));
            Clients = new List<TcpClient>();
            NetworkStream = new List<NetworkStream>();

        }

        public void Start() //Start
        {
            Listener.Start();
            Listener.BeginAcceptTcpClient(new AsyncCallback(ClientConnect), null);

        }


        public void Stop() //Stop
        {
            for (int i = 0; i < Clients.Count; i++)
            {
                Clients[i].Close();
                NetworkStream[i].Close();
            }
            
                Listener.Stop();
            
        }

        public void SendDataToClient(int clientid, byte[] data)
        {

            int clientidx = clientid - 1;
            NetworkStream[clientidx].Write(data, 0, data.Length);
            NetworkStream[clientidx].Flush();
        
        }

       public void SendDataToAllClient(byte[] data)
       {
           for (int i = 1; i <= Clients.Count; i++)
           {
               SendDataToClient(i, data);
           }
       }

       public void SendToAllClientExcept(int clientid, byte[] data)
       {
           for (int i = 1; i <= Clients.Count; i++)
           {
               if(clientid != i) SendDataToClient(i, data);
           }

       }

       private void ClientConnect(IAsyncResult ar)
        {
            TcpClient client = Listener.EndAcceptTcpClient(ar);
            Clients.Add(client);
            NetworkStream.Add(client.GetStream());

            if (OnClientConnect != null) OnClientConnect(Clients.Count);

            Thread thrdReceive = new Thread(new ParameterizedThreadStart(ClientReceiveData));
            thrdReceive.Start(Clients.Count);
            Listener.BeginAcceptTcpClient(new AsyncCallback(ClientConnect), null);

        }

        private void ClientReceiveData(object client)
        {
            int clientid = (int)client;
            int clientidx = clientid - 1;
            int buffersize;
            byte[] databuffer;

            while (true)
            {
                databuffer = new byte[1048];
                buffersize = NetworkStream[clientidx].Read(databuffer, 0, databuffer.Length);
                Array.Resize(ref databuffer, buffersize);
                if (OnReceiveData != null) OnReceiveData(clientid, databuffer);
              }
          }
   
     }

}
VadimKhamutov вне форума Ответить с цитированием
Старый 06.01.2014, 11:58   #3
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,882
По умолчанию

Ну и в чём вопрос ? Где Ваша постановка задачи, где конкретные проблемы и вопросы ?
Писать код с ютуба это, я скажу, феерично. Вы, наверное, процентов 90 не понимаете в этом коде, а ещё просите Вам доработать и объяснить. Может, Вы лучше почитаете книгу и начнёте с простейших программ ? Можно вон студентам помогать в соотв. разделе форума - там простые задачи, которые как нельзя лучше закрепляют основы. Потом уже с уверенными знаниями займитесь тем, что Вам интересно - почитайте блоги, где пишут программисты о способах реализации тех или иных нужных Вам задач, соберите и проанализируйте информацию, спроектируйте программу и пробуйте писать.
Сейчас Вы напоминаете школоло, которое считает, что без теории и практики, нахватавшись по верхам смутных реализаций некоторых принципов и набрав каких-то обрывков кода, сможет написать нормальную программу.
К серьёзным задачам и подходить надо серьёзно.
Удачи !

пс. Не стоит обижаться, я просто дал оценку со стороны, я могу ошибаться, но Ваше сообщение не позволяет смотреть на положение дел иначе, чем я высказал.
phomm вне форума Ответить с цитированием
Старый 07.01.2014, 00:47   #4
VadimKhamutov
Пользователь
 
Регистрация: 05.01.2014
Сообщений: 11
По умолчанию

Цитата:
Сообщение от phomm Посмотреть сообщение
Ну и в чём вопрос ? Где Ваша постановка задачи, где конкретные проблемы и вопросы ?
Писать код с ютуба это, я скажу, феерично. Вы, наверное, процентов 90 не понимаете в этом коде, а ещё просите Вам доработать и объяснить. Может, Вы лучше почитаете книгу и начнёте с простейших программ ? Можно вон студентам помогать в соотв. разделе форума - там простые задачи, которые как нельзя лучше закрепляют основы. Потом уже с уверенными знаниями займитесь тем, что Вам интересно - почитайте блоги, где пишут программисты о способах реализации тех или иных нужных Вам задач, соберите и проанализируйте информацию, спроектируйте программу и пробуйте писать.
Сейчас Вы напоминаете школоло, которое считает, что без теории и практики, нахватавшись по верхам смутных реализаций некоторых принципов и набрав каких-то обрывков кода, сможет написать нормальную программу.
К серьёзным задачам и подходить надо серьёзно.
Удачи !

пс. Не стоит обижаться, я просто дал оценку со стороны, я могу ошибаться, но Ваше сообщение не позволяет смотреть на положение дел иначе, чем я высказал.
Согласен с Вами на счёт феерично. Код мне понятен, я прочитал принцип работы и всё понял. Учить-то я учу, учебник Герберта Шилдта. На счёт практики соглашусь полностью, ее нехватка колоссальная. Проблема, собственно, заключается в том что сервер и клиент не запускаются. Компилируются, но не запускаются, поэтому я попросил помощи или советов.
VadimKhamutov вне форума Ответить с цитированием
Старый 07.01.2014, 21:37   #5
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,882
По умолчанию

Компилируется и не запускается ? Правда что ли ? И Вы говорите, что понимаете код ?
В приведённых фрагментах кода нет ничего, кроме собственно, классов клиента и сервера. Чтобы что-то запустить, надо это что-то иметь, а именно экземпляр класса, Вы его где создаёте ? Где вообще функция main() ? Или что, мне надо догадаться в чём проблема по коду классов вместо кода _всей_ программы ?
Может хотя бы ссылку дали бы на свои "уроки".
Ваш вопрос пуст сам по себе, я об этом сразу сказал. Нет никакого вопроса. Вообще нет. Совсем.
Условно говоря, (если это весь код Вы привели), у Вас проблема с тем, что у Вас нет программы, а просто есть код... как-то ещё донести это до Вас я затрудняюсь.

Вот хотя бы для изучения один примерчик: http://programmersforum.ru/showthread.php?t=225897 правда там только клиент, и он не такой как нужно Вам.. но хотя бы общее представление будет.

Коли прозреете, то жду полный код всей программы.
phomm вне форума Ответить с цитированием
Старый 08.01.2014, 01:28   #6
VadimKhamutov
Пользователь
 
Регистрация: 05.01.2014
Сообщений: 11
По умолчанию

Цитата:
Сообщение от phomm Посмотреть сообщение
Компилируется и не запускается ? Правда что ли ? И Вы говорите, что понимаете код ?
В приведённых фрагментах кода нет ничего, кроме собственно, классов клиента и сервера. Чтобы что-то запустить, надо это что-то иметь, а именно экземпляр класса, Вы его где создаёте ? Где вообще функция main() ? Или что, мне надо догадаться в чём проблема по коду классов вместо кода _всей_ программы ?
Может хотя бы ссылку дали бы на свои "уроки".
Ваш вопрос пуст сам по себе, я об этом сразу сказал. Нет никакого вопроса. Вообще нет. Совсем.
Условно говоря, (если это весь код Вы привели), у Вас проблема с тем, что у Вас нет программы, а просто есть код... как-то ещё донести это до Вас я затрудняюсь.

Вот хотя бы для изучения один примерчик: http://programmersforum.ru/showthread.php?t=225897 правда там только клиент, и он не такой как нужно Вам.. но хотя бы общее представление будет.

Коли прозреете, то жду полный код всей программы.
Отсюда переписывал: http://www.youtube.com/watch?v=_u4f1AA5I0M . Там несколько видео. Это все коды. Я имел ввиду что понимаю значение команд, а на функцию main() я действительно не обратил внимания.

Получается, что я выбрал слишком сложный для меня проект, на данный момент. А с каких задач лучше начинать, не имея практики?

Последний раз редактировалось VadimKhamutov; 08.01.2014 в 01:31.
VadimKhamutov вне форума Ответить с цитированием
Старый 08.01.2014, 18:08   #7
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,882
По умолчанию

Там автор привёл ссылку на свой репозиторий.
http://code.google.com/p/topaz-proje...e/#svn%2Ftrunk
Чтобы оттуда скачать можно использовать TortoiseSVN

Мб, получится разобраться у Вас.

Насчёт задач не знаю, зависит от уровня владения языка, изучения других языков, общего уровня математики и логики.
Если силы есть, то начать можно так:
Цитата:
Сообщение от phomm
Можно вон студентам помогать в соотв. разделе форума - там простые задачи, которые как нельзя лучше закрепляют основы.
phomm вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите выбрать режим работы клиент сервер tarakan1983 Помощь студентам 4 24.10.2008 12:31
Помогите дописать программу клиент-сервер!!! Oksana1988 Помощь студентам 2 31.03.2007 09:45
Помогите.Программа клиент-сервер vyt Работа с сетью в Delphi 3 14.03.2007 16:01