Модераторы: gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Клиент-серверное приложение с использованием формы 
:(
    Опции темы
Vitkaz
Дата 22.9.2009, 21:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 90
Регистрация: 29.11.2006

Репутация: нет
Всего: нет



Всем привет! Мне нужно создать простое клиент-серверное приложение для обмена сообщениями между сервером и клиентом, по заданному IP.
Взял пример из MSDN(код ниже), но он работает только с консолью, а мне нужно использовать форму. Я  сделал так, что бы сообщения выводились в ListBox т.е. вместо  Console.Write("Waiting for a connection... "); пишу   listBox1.Items.Add ("Waiting for a connection... ");, но код работает только до первого while, если while убрать, то до строки TcpClient client = server.AcceptTcpClient(); т.е зависает на ней. Помогите! Что не так?
Код

using System;
using System.Text;
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Threading;

public class TcpListenerSample
{


    static void Main(string[] args)
    {
        try
        {
            // set the TcpListener on port 13000
            int port = 13000;
            TcpListener server = new TcpListener(IPAddress.Any, port);

            // Start listening for client requests
            server.Start();


            // Buffer for reading data
            byte[] bytes = new byte[1024];
            string data;

            //Enter the listening loop
            while (true)
            {
                Console.Write("Waiting for a connection... ");

                // Perform a blocking call to accept requests.
                // You could also user server.AcceptSocket() here.
                TcpClient client = server.AcceptTcpClient();
                Console.WriteLine("Connected!");

                // Get a stream object for reading and writing
                NetworkStream stream = client.GetStream();

                int i;

                // Loop to receive all the data sent by the client.
                i = stream.Read(bytes, 0, bytes.Length);

                while (i != 0)
                {
                    // Translate data bytes to a ASCII string.
                    data = System.Text.Encoding.ASCII.GetString(bytes, 0, i);
                    Console.WriteLine(String.Format("Received: {0}", data));

                    // Process the data sent by the client.
                    data = data.ToUpper();

                    byte[] msg = System.Text.Encoding.ASCII.GetBytes(data);

                    // Send back a response.
                    stream.Write(msg, 0, msg.Length);
                    Console.WriteLine(String.Format("Sent: {0}", data));

                    i = stream.Read(bytes, 0, bytes.Length);

                }

                // Shutdown and end connection
                client.Close();
            }
        }
        catch (SocketException e)
        {
            Console.WriteLine("SocketException: {0}", e);
        }


        Console.WriteLine("Hit enter to continue...");
        Console.Read();
    }

}




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

Это сообщение отредактировал(а) Vitkaz - 23.9.2009, 11:00
PM MAIL   Вверх
Vitkaz
Дата 23.9.2009, 19:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 90
Регистрация: 29.11.2006

Репутация: нет
Всего: нет



Неужели никто не может помочь ? Мне нужно чтобы по клику кнопки запускался сервер и ждал когда к нему обратится клиент. 
Помогите пожалуйста реализовать пример из MSDN, только с использованием формы.

Это сообщение отредактировал(а) Vitkaz - 23.9.2009, 19:07
PM MAIL   Вверх
Crypton
Дата 24.9.2009, 17:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 158
Регистрация: 9.10.2006
Где: США, Санкт-Петерб ург

Репутация: нет
Всего: 2



История долгая. Теоретически тебе нужно запустить сервер в отдельном потоке в котором ты зациклишь while который будет ждать подключающихся клиентов. Когда клиент подключается, ты запускаешь новый отдельный поток который обрабатывает уже подключение. В это-же время основной цикл возвращается на ожидание нового подключения.

http://www.codeproject.com/KB/IP/chatserver.aspx
--------------------
«Все, что вы знаете — ложь» Теория мироздания 
PM MAIL WWW ICQ Skype   Вверх
Vitkaz
Дата 27.9.2009, 12:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 90
Регистрация: 29.11.2006

Репутация: нет
Всего: нет



Цитата(Crypton @ 24.9.2009,  17:38)
История долгая. Теоретически тебе нужно запустить сервер в отдельном потоке в котором ты зациклишь while который будет ждать подключающихся клиентов. Когда клиент подключается, ты запускаешь новый отдельный поток который обрабатывает уже подключение. В это-же время основной цикл возвращается на ожидание нового подключения.

http://www.codeproject.com/KB/IP/chatserver.aspx

Спасибо! Уже сделал.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
cully
mr.DUDA
Exception

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, cully, mr.DUDA, Exception.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Распределённые приложения и сеть | Следующая тема »


 




[ Время генерации скрипта: 0.0409 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.