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

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

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > WPF, UWP, WinRT, XAML
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.11.2014, 00:53   #1
Sumy-ua
Пользователь
 
Регистрация: 12.05.2013
Сообщений: 31
По умолчанию Клиент-сервер

Как сделать что бы сервер всегда прослушивал сеть?
клиент
Код:
private void button1_Click(object sender, EventArgs e)
        {
            TcpClient client = new TcpClient();
            client.Connect(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 12000));
 
            StreamWriter sw = new StreamWriter(client.GetStream());
            sw.AutoFlush = true; 
            sw.WriteLine(textBox1.Text);
            client.Close();
 
        }
сервер
Код:
private void button1_Click(object sender, EventArgs e)
        {
            TcpListener listner = new TcpListener(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 12000));
            listner.Start();
            
                TcpClient client = listner.AcceptTcpClient();
                StreamReader sr = new StreamReader(client.GetStream());
                textBox1.Text = sr.ReadLine();
                client.Close();
        }
если использовать в сервере while(true) то приложение зависает
Sumy-ua вне форума Ответить с цитированием
Старый 24.11.2014, 08:00   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
то приложение зависает
Правильно )
Это ведь синхронный метод прослушивания порта. Конечно он будет зависать.
Тут нужен асинхронный подход. Например подсадить этот цикл в отдельный поток.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 24.11.2014, 16:20   #3
Sumy-ua
Пользователь
 
Регистрация: 12.05.2013
Сообщений: 31
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Правильно )
Это ведь синхронный метод прослушивания порта. Конечно он будет зависать.
Тут нужен асинхронный подход. Например подсадить этот цикл в отдельный поток.
Это оно? Если да , сервер один раз выдал результат , а если пробовать следующий раз то выдает ошибку в етой строке sListener.Bind(ipEndPoint); ( Необработанное исключение типа "System.Net.Sockets.SocketException " в System.dll
Дополнительные сведения: Обычно разрешается только одно использование адреса сокета (протокол/сетевой адрес/порт))

сервер
Код:
private void button1_Click(object sender, EventArgs e)
        {

            IPHostEntry ipHost = Dns.GetHostEntry("localhost");
            IPAddress ipAddr = ipHost.AddressList[0];
            IPEndPoint ipEndPoint = new IPEndPoint(ipAddr, 11000);

            // Создаем сокет Tcp/Ip
            Socket sListener = new Socket(ipAddr.AddressFamily, SocketType.Stream, ProtocolType.Tcp);

            // Назначаем сокет локальной конечной точке и слушаем входящие сокеты

            sListener.Bind(ipEndPoint);
            sListener.Listen(10);

            // Начинаем слушать соединения

            
                // Программа приостанавливается, ожидая входящее соединение
                Socket handler = sListener.Accept();
                string data = null;

                // Мы дождались клиента, пытающегося с нами соединиться

                byte[] bytes = new byte[1024];
                int bytesRec = handler.Receive(bytes);

                data += Encoding.UTF8.GetString(bytes, 0, bytesRec);

                textBox1.Text = data;

                // Отправляем ответ клиенту\
                string reply = "data= " + data;
                
                byte[] msg = Encoding.UTF8.GetBytes(reply);
                handler.Send(msg);



                handler.Shutdown(SocketShutdown.Both);
                handler.Close();
            }
клиент
Код:
 private void button1_Click(object sender, EventArgs e)
        {
           
            
          
            byte[] bytes = new byte[1024];

            // Соединяемся с удаленным устройством

            // Устанавливаем удаленную точку для сокета
            IPHostEntry ipHost = Dns.GetHostEntry("localhost");
            IPAddress ipAddr = ipHost.AddressList[0];
            IPEndPoint ipEndPoint = new IPEndPoint(ipAddr, 11000);

            Socket sender1 = new Socket(ipAddr.AddressFamily, SocketType.Stream, ProtocolType.Tcp);

            // Соединяем сокет с удаленной точкой
            sender1.Connect(ipEndPoint);

            
            string message = textBox1.Text;

            
            byte[] msg = Encoding.UTF8.GetBytes(message);

            // Отправляем данные через сокет
            int bytesSent = sender1.Send(msg);

            // Получаем ответ от сервера
            int bytesRec = sender1.Receive(bytes);

            textBox2.Text= Encoding.UTF8.GetString(bytes, 0, bytesRec);

           

            // Освобождаем сокет
            sender1.Shutdown(SocketShutdown.Both);
            sender1.Close(); 
        }
Sumy-ua вне форума Ответить с цитированием
Старый 24.11.2014, 17:23   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
а если пробовать следующий раз
Мне не совсем понятно почему ты посадил создание сервера на клик кнопки...
Обычно сервер создается в некой глобальной переменной. А в дополнительном потоке запускается и живет пока программа работает, а не умирает по клику кнопки.
Ты можешь сделать доппоток и в него стартовать прослушку?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 24.11.2014, 18:42   #5
Sumy-ua
Пользователь
 
Регистрация: 12.05.2013
Сообщений: 31
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Ты можешь сделать доппоток и в него стартовать прослушку?
Скорее всего нет, если бы ты мне помог было бы замечательно.
Sumy-ua вне форума Ответить с цитированием
Старый 24.11.2014, 19:19   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Я не пишу на Шарпее, у меня нет его при себе. Я просто подал идею: Создать поток, и в нем запустить бесконечный цикл на прослушивание.
Как создавать потоки можно узнать здесь: http://msdn.microsoft.com/en-us/libr...=vs.71%29.aspx
А создать прослушку ты уже умеешь.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как отправить видео захват(с веб-Кам.) Клиент->Сервер->Клиент RODNOC Мультимедиа в Delphi 17 03.10.2010 22:31
сервер+клиент+клиент на телефон Razyiller Работа с сетью в Delphi 3 01.04.2010 20:10
Возможно-ли Клиент-серверное приложение типа Клиент(Pascal) а сервер(CGI)? Demol Работа с сетью в Delphi 1 21.04.2009 16:18
Клиент-сервер-клиент Кронос Работа с сетью в Delphi 3 24.08.2007 07:57