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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Обмен данными между TCPClient и TCPListener 
:(
    Опции темы
appshneg
Дата 23.4.2009, 08:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Привет всем.
При создании тсп-сервера и клиента у меня возникла такая проблема: подключается все нормально, клиент посылает данные серверу - клиент их принимает нормально, но когда я пытаюсь сразу же отправить данные клиенту - всё тупо виснет. Я не знаю в чем проблема. Тип проекта Windows Forms.
PM MAIL   Вверх
-Mikle-
Дата 23.4.2009, 08:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Невидимка Vingrad'а
***


Профиль
Группа: Экс. модератор
Сообщений: 1672
Регистрация: 22.6.2003
Где: Казахстан, Астана

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



Нечего сказать, непонятно что значит 
Цитата(appshneg @  23.4.2009,  11:36 Найти цитируемый пост)
пытаюсь сразу же отправить данные клиенту

сразу после коннекта?

PS:
Название темы: "Обмен данными между TCPClient и TCPListener"
Между TCPClient и TCPListener обмена данными не происходит. У них разные задачи. Обмен происходит между TCPClient(на клиенте) и TCPClient(на сервере).


--------------------
Если тебе плюют в спину, значит ты впереди...
PM   Вверх
appshneg
Дата 23.4.2009, 09:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(-Mikle- @  23.4.2009,  08:43 Найти цитируемый пост)
Между TCPClient и TCPListener обмена данными не происходит.

Да, действительно! Обшибся... smile 

Цитата(-Mikle- @  23.4.2009,  08:43 Найти цитируемый пост)
сразу после коннекта?


Сразу после того как клиент подключился к серверу я получаю поток:

Код

NetworkStream stream = client.GetStream();


Клиент:
Код

            string mess = "...";
            
            Byte[] data = System.Text.Encoding.Unicode.GetBytes(mess);
            try
            {
                m_client = new TcpClient(host, m_port);
                this.listBox1.Items.Add("Connected to the server!");
                m_stream = m_client.GetStream();
                m_stream.Write(data, 0, data.Length);
                string datastr=String.Empty;
                Int32 i;
                Byte[] bytes = new Byte[256];
               string datastr = "";
               while ((i = m_stream.Read(bytes, 0, bytes.Length)) != 0)
               {
                   datastr += System.Text.Encoding.Unicode.GetString(bytes, 0, i);
               }

                this.listBox1.Items.Add("Send message: " + mess);
                this.listBox1.Items.Add("Receive message: " + datastr);
                m_client.Close(); 
                
            }
            catch (ArgumentNullException ex)
            {
                this.listBox1.Items.Add(ex.Message);
            }
            catch (SocketException ex)
            {
                this.listBox1.Items.Add(ex);
            }



Сервер:
Код

 try
            {
             
                server = new System.Net.Sockets.TcpListener(localAddr, port);
                server.Start();
                while (true)
                {
                    this.SetText("Waiting for connection..."); 
             
                    System.Net.Sockets.TcpClient client = server.AcceptTcpClient();
             
                    this.SetText("==>>Connected!");  
             
                    System.Net.Sockets.NetworkStream stream = client.GetStream();
                    Byte[] bytes = new Byte[256];
                    string data = null;
                    int i;
                    while ((i = stream.Read(bytes, 0, bytes.Length)) != 0)
                    {
                        data = System.Text.Encoding.Unicode.GetString(bytes, 0, i);
                        this.SetText("Received from client: " + data); 
                    }
             
                    string strg = "From server";
                    bytes = System.Text.Encoding.Unicode.GetBytes(strg);
                    stream.Write(bytes, 0, bytes.Length);
                    client.Close();
                    this.SetText("<<==Disconnected."); 
             
                }
                
            }
            catch (System.Net.Sockets.SocketException ex)   
            {
                MessageBox.Show("Error! "+ex.Message+"\r\nCode:"+ex.ErrorCode);
                
            }


PM MAIL   Вверх
-Mikle-
Дата 23.4.2009, 09:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Невидимка Vingrad'а
***


Профиль
Группа: Экс. модератор
Сообщений: 1672
Регистрация: 22.6.2003
Где: Казахстан, Астана

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



Не верно производишь чтение. Верно будет так:
Код

                while (m_stream.DataAvailable)
                {
                    i = m_stream.Read(bytes, 0, bytes.Length);
                    datastr += System.Text.Encoding.Unicode.GetString(bytes, 0, i);
                }

Это надо и в клиенте и в сервере (по аналогии) поменять, и будет все ОК!


--------------------
Если тебе плюют в спину, значит ты впереди...
PM   Вверх
appshneg
Дата 23.4.2009, 15:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



-Mikle-, спасибо получилось! smile 
Только я написал так:

Код

                    do
                    {
                        i = stream.Read(bytes, 0, bytes.Length);
                        data += System.Text.Encoding.Unicode.GetString(bytes, 0, i);
                    }
                    while (stream.DataAvailable);

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


Невидимка Vingrad'а
***


Профиль
Группа: Экс. модератор
Сообщений: 1672
Регистрация: 22.6.2003
Где: Казахстан, Астана

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



Цитата(appshneg @  23.4.2009,  18:17 Найти цитируемый пост)
Только я написал так

Да, смысл тот же (свойство DataAvailable)... только в твоем случае он будет ждать, пока не придут первые данные, но видимо тебе так и нужно... Ок.


--------------------
Если тебе плюют в спину, значит ты впереди...
PM   Вверх
xlbaton
Дата 2.6.2009, 13:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



appshneg
ОГРОМЕННАЯ ПРОСЬБА!!!

дайте полный листинг сервера, который в итоге получился
я вожусь с подобной задачей.
очень нужно создать подобный сервер
просто я не шибко силен в C# и в C++
и при компиляции чужих кодов постоянно допускаю ошибки
задача в 2-х словах
мне нужен просто слушающий сервер на локальном адресе на определеном порту
сервер ждет соединения, как только поступило
клиент (железка) соеденился отправил пакет, отобразили содержание пакета (можно и в консоли) и разрвали сокет
ждет соединения дальше
соединений может быть множество от различных клиентов

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

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

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

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


 




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


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

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