Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

клиентЫ и сервер

74K
04 ноября 2011 года
xsb3
6 / / 04.11.2011
Вот мож в 2 слова обьяснить получится и предложите примеры готовые на этот вариант...

Есть некая база данных (БД) и в фирме имеется около 100+ клиентов (КБД) которые коннектятся к базе данных и работают с ней. Идея такова... Когда 100+ юзеров запускают клиент(КБД) который работает с базой данных они запускают в паралельном патоке клиент(К) который каждые 60 сек шлет на сервер сообщения типа (60 секунд полет нормальный и свой логин и айпи). Соответственно перестал слать клиент (К) пакеты - значит интернета у юзера нету либо выключил клиент(КБД) который с БД работает. Далее руководство решает уволить кого нить из этих 100+ юзеров. Сервер который принимает сообщения от клиентов(К) посылает всем клиентам(К) сообщения если ты такойта (логин либ еще чтото) то выключить клиент(КБД) и сменить в БД пароль этого юзера. В связи с этим та мне и не подходят большенство примеров которые я видел:
- Либо коннектятся только 1 клиент как 2+ запустиш так труба начинается...
- Когда теряет клиент связь с сервером он вырубается...
- Когда потом после утери сигнала сигнал возвращается тоже куча проблем...
- Сервер теряет клиентов и после возвращения сигнала не может им ничего выслать...
- Реализация на консоле менее удобна для этого чем нежели в оконном режиме видеть список юзеров онлайн и видеть что кто шлет...
Вот такая пролемка... Нашел более менее подходящий пример в нем все нормально... И принимает сигналы от многих юзеров... И при потере сигнала возвращается когда соединение клиент продолжает все высылать.... НО ОНО НА КОНСОЛЕ МНЕ НА ВИН ФОРМЕ НАДА... А сам не осилю изменить...

Это сервер
Код:
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
namespace Server
{
    class Server
    {
        [System.Runtime.InteropServices.DllImport("kernel32.dll")]
        public static extern bool SetProcessWorkingSetSize(IntPtr handle, int minimumWorkingSetSize, int maximumWorkingSetSize);
        const int port = 9051;
        public const int bufferSize = 512;
        static void Main(string[] args)
        {
            SetProcessWorkingSetSize(System.Diagnostics.Process.GetCurrentProcess().Handle, -1, -1);
            TcpListener Listener = new TcpListener(IPAddress.Any, port);
            Listener.Start();
            while (true)
            {
                while (!Listener.Pending())
                {
                    Thread.Sleep(1000);
                }
                Connection NewConnection = new Connection(Listener);
                ThreadPool.QueueUserWorkItem(new WaitCallback(NewConnection.StartRead));
            }
        }
    }
    class Connection
    {
        TcpListener Listener;
        TcpClient Client;
        NetworkStream Stream;
        static int NumConnections = 0;
        public Connection(TcpListener L)
        {
            try
            {
                NumConnections++;
                Console.WriteLine("{0} active connections", NumConnections.ToString());
                Listener = L;
                Client = Listener.AcceptTcpClient();
                Stream = Client.GetStream();
            }
            catch
            {
                Stream.Close();
                Client.Close();
                Thread.CurrentThread.Abort();
            }
        }
        public void StartRead(object obj)
        {
            try
            {
                while (true)
                {
                    byte[] byteData = new byte[Server.bufferSize];
                    int bytesRead = Stream.Read(byteData, 0, byteData.Length);
                    string InputData = Encoding.Default.GetString(byteData, 0, bytesRead);
                    Console.WriteLine(InputData);
                }
            }
            catch
            {
                Stream.Close();
                Client.Close();
                Thread.CurrentThread.Abort();
            }
        }
    }
}


И клиент

Код:
using System;
using System.Text;
using System.Net.Sockets;
using System.Threading;
namespace Client
{
    class Client
    {
        [System.Runtime.InteropServices.DllImport("kernel32.dll")]
        public static extern bool SetProcessWorkingSetSize(IntPtr handle, int minimumWorkingSetSize, int maximumWorkingSetSize);
        const int bufferSize = 512;
        static byte[] byteData = new byte[bufferSize];
        static NetworkStream Stream;
        static System.Net.IPAddress IP = System.Net.IPAddress.Parse("127.0.0.1");
        const int port = 9051;
        static void Main(string[] args)
        {
            SetProcessWorkingSetSize(System.Diagnostics.Process.GetCurrentProcess().Handle, -1, -1);
        tryConnect:
            TcpClient tcpClient = new TcpClient();
            try
            {
                tcpClient.Connect(IP, port);
                Stream = tcpClient.GetStream();
                while (true)
                {
                    Console.WriteLine(DateTime.Now.ToString());
                    Write(DateTime.Now.ToString());
                    Thread.Sleep(5000);
                }
            }
            catch
            {
                Console.WriteLine("[X] Server not available!");
                Thread.Sleep(3000);
                goto tryConnect;
            }
        }
        static void Write(string s)
        {
            try
            {
                byteData = new byte[bufferSize];
                byteData = Encoding.Default.GetBytes(s);
                Stream.Write(byteData, 0, byteData.Length);
                Thread.Sleep(100);
            }
            catch
            {
                Console.WriteLine("[X] Server not available!");
            }
        }
    }
}


ЛИБ ПОМОГИТЕ ПРИМЕРОМ НА С# В ВИНФОРМЕ.. Где мого клиентов шлет серверу сообщение и получает ответ.....
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог