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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> подключение нескольких клиентов, TcpListener TcpClient 
:(
    Опции темы
Ronin08
Дата 18.3.2008, 00:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 218
Регистрация: 16.2.2008
Где: г.Москва

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



Как сделать так чтобы можно было посылать сообщение от нескольких клиентов или одно и то же сообщение от одного клиента на сервер?
А то после второй посылке выдаеться ошибка.
клиент:
 
Код

class Program
    {
        static void Main(string[] args)
        {
            try
            {
                TcpClient client = new TcpClient();
                client.Connect("xxx", 5001);
                NetworkStream stm = client.GetStream();
                byte[] sendBytes = Encoding.ASCII.GetBytes(" this data has come from " + " another place");
                stm.Write(sendBytes, 0, sendBytes.Length);
                client.Close();
            }
            catch (Exception e)
            {
                Console.WriteLine(" The Listener has probably not started");
            }     
        }

сервер:

        
Код

static void Main(string[] args)
        {
            try
            {
                TcpListener listener = new TcpListener(5001);
                listener.Start();
                
                TcpClient tc = listener.AcceptTcpClient();
                NetworkStream stm = tc.GetStream();

                byte[] readbuf = new byte[100];
                stm.Read(readbuf, 0, 100);

                //Отображаем данные
                Console.WriteLine(Encoding.ASCII.GetString(readbuf));
                stm.Close();
            }
            catch
            {
                Console.WriteLine("Can't receive data");
            }
            
        }


Это сообщение отредактировал(а) Ronin08 - 18.3.2008, 00:53
--------------------
Зачем вставать рано или поздно? Надо вставать вовремя
PM MAIL   Вверх
PPS05
Дата 18.3.2008, 21:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 262
Регистрация: 6.11.2005
Где: Беларусь, Минск

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



А в клиенте или сервере ошибка? Есть подозрение: ты после получения данных в сервере закрываешь поток Listener'a.


--------------------
Ушел с форума и не вернулся.
PM MAIL ICQ   Вверх
andrew_sh
Дата 2.4.2008, 22:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



А если попробовать в цикле:
Код

        try
            {
                TcpListener listener = new TcpListener(5001);
                listener.Start();
                while(true)
                {
                        TcpClient tc = listener.AcceptTcpClient();
                        NetworkStream stm = tc.GetStream();

                        byte[] readbuf = new byte[100];
                        stm.Read(readbuf, 0, 100);

                         //Отображаем данные
                         
                         message =  Encoding.ASCII.GetString(readbuf);
                         Console.WriteLine(message);
                         stm.Close();
                         if(message=="exit") return;
                 }
              }
           ........ 


Т.е. ты слушаешь порт ( listener.AcceptTcpClient()) , считываешь данные и выходишь из программы. А в цикле будет слушать до опупения (или как в данно коде пока не пришлешь строку "exit")

И чтение потока я думаю нужно немного переделать !

Это сообщение отредактировал(а) andrew_sh - 2.4.2008, 22:40
PM MAIL   Вверх
stereon
Дата 3.4.2008, 08:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Да там надо читать постоянно в цикле бесконечном и не боюся за ресурсы, потому что 
listener.AcceptTcpClient() возвращает управление кода только после поступления соединения.
+ советую использовать обёртки для TcpClient для облегчения жизни на codeproject кажется была хорошая.
PM MAIL   Вверх
beowulfda
Дата 13.5.2008, 08:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Не уверен за результат, но можно сделать асинхронное принятие клиентов (связка .BeginAcceptTcpClient и объекта ManualResetEvent)

PM MAIL   Вверх
Ronin08
Дата 14.5.2008, 12:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 218
Регистрация: 16.2.2008
Где: г.Москва

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



спс, попробую

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

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

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

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


 




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


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

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