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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Не коннектится клиент 
:(
    Опции темы
Ronin08
Дата 11.3.2008, 00:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Вопрос следующего характера:

Имеется клиен:

Код

public Form1()
        {
            InitializeComponent();
        }

        private void btnSend_Click(object sender, EventArgs e)
        {
            TcpClient tcpClient = new TcpClient(txtHost.Text, Int32.Parse(txtPort.Text));
            NetworkStream ns = tcpClient.GetStream();
            FileStream fs = File.Open("c:\\aaa.txt", FileMode.Open);
            int data = fs.ReadByte();
            while (data != -1)
            {
                ns.WriteByte((byte)data);
                data = fs.ReadByte();
            }
            fs.Close();
            ns.Close();
            tcpClient.Close();
        }


Имеется сервер:

Код

public Form1()
        {
            InitializeComponent();
            Thread thread = new Thread(new ThreadStart(Listen));
            thread.Start();
        }
        public void Listen()
        {
            IPAddress localAddr = IPAddress.Parse("192.168.26.1");
            Int32 port = 2112;
            TcpListener tcpListener = new TcpListener(localAddr, port);
            tcpListener.Start();
            TcpClient tcpClient = tcpListener.AcceptTcpClient();
            NetworkStream ns = tcpClient.GetStream();
            StreamReader sr = new StreamReader(ns);
            string result = sr.ReadToEnd();
            Invoke(new UpdateDisplayDelegate(UpdateDisplay),
                   new object[] { result });
            tcpClient.Close();
            tcpListener.Stop();
         }

        public void UpdateDisplay(string text)
        {
            txtDisplay.Text = text;
        }

        protected delegate void UpdateDisplayDelegate(string text);


Когда запускаю на одной машине, то все хорошо работает
в поле хоста указываю имя своей машине, в поле порт например 2112;

пробую тоже самое проделать через виртуальную машину (vmware) -> проблема 
это  связано видимо с тем, что на сервере я указываю Ip той машины от которой должно прийти сообщение (клиент), а кампилятор ругается, что на этой  машине (сервер) такой ip не обнаружен.

что надо изменить? 



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


Бывалый
*


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

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



Цитата(Ronin08 @ 11.3.2008,  00:30)
кампилятор ругается, что на этой  машине (сервер) такой ip не обнаружен.

наверное компилятор нового поколения=)))) 
поделу: попробуй попинговать что-ли и проверить настройки фаервола. если не поможет, ну тогда это потрясающая аномалия!
PM MAIL WWW ICQ Skype YIM MSN   Вверх
Ronin08
Дата 11.3.2008, 11:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Все, разобрался! 
zaver, это не аномалия, а несвежая голова smile 
Как говорится "утро вечера мудренее"

Тогда еще вопрос:
При повторной посылке файла ааа.txt приложение подвесает.
Что надо изменить на сервере, чтобы можно было еще раз получить этот же файл (или другой)?



Это сообщение отредактировал(а) Ronin08 - 11.3.2008, 14:42
--------------------
Зачем вставать рано или поздно? Надо вставать вовремя
PM MAIL   Вверх
Alexsar
Дата 11.3.2008, 23:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



можно так: создаёшь цикл, в котором ждёшь подключение клиентов, как только клиент подрубается, создавай новый поток для этого клиента, а дальше принимай данные
код сервера примерно выглядит так

Код

  //связываем сервер с локальным портом
  TcpListener clientListener = new TcpListener(confXml.PORT);

   //начинаем слушать
   clientListener.Start();

    //textBox1.Text = "Waiting for connections..";

     while (true)
     {
           //даём согласие на соединение
           TcpClient client = clientListener.AcceptTcpClient();

           ClientHandler cHandler = new ClientHandler();

           //передаём значение объекту ClientHandler
            cHandler.clientSocket = client;

            //создаём новый поток для клиента
            clientThread = new Thread(new ThreadStart(cHandler.RunClient));
            clientThread.Start();
        }
        clientListener.Stop();



класс ClientHandler
Код

 class ClientHandler
    {
        public TcpClient clientSocket;

        public void RunClient()
        {
            //создаём классы потоков
            StreamReader readerStream = new StreamReader(clientSocket.GetStream());


            string result = readerStream.ReadToEnd();
            Invoke(new UpdateDisplayDelegate(UpdateDisplay),
                   new object[] { result });
            clientSocket.Close();
        }
    }


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


Бывалый
*


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

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



не получается так
ошибка на стороне клиента : "Подключение не установлено, т.к. конечный компьютер отверг запрос на подключение"

и что значит в строчке:
Цитата

TcpListener clientListener = new TcpListener(confXml.PORT);


параметр confXml.PORT?

Это сообщение отредактировал(а) Ronin08 - 15.3.2008, 02:09
--------------------
Зачем вставать рано или поздно? Надо вставать вовремя
PM MAIL   Вверх
Alexsar
Дата 15.3.2008, 23:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



вместо confXml.PORT поставь номер своего порта, забыл убрать
на счёт ошибки - стандартный файервол случайно не включен?
PM MAIL   Вверх
Ronin08
Дата 16.3.2008, 23:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата

на счёт ошибки - стандартный файервол случайно не включен? 

 отключен

код на стороне сервера такой: (но где-то ошибка)
Код

namespace TcpReceive
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            
                InitializeComponent();
                int i = 0;
                IPAddress localAddr = IPAddress.Parse("192.168.26.1");
                Int32 port = 2112;
                TcpListener tcpListener = new TcpListener(localAddr, port);
                tcpListener.Start();

                while (i == 5)
                {
                    TcpClient tcpClient = tcpListener.AcceptTcpClient();
                    ClientHandler cHandler = new ClientHandler();

                    //передаём значение объекту ClientHandler
                    cHandler.clientSocket = tcpClient;

                    //создаём новый поток для клиента
                    Thread clientThread = new Thread(new ThreadStart(cHandler.RunClient));
                    clientThread.Start();
                    i++;                   
                }
                tcpListener.Stop();
        }
           
        class ClientHandler
        {
            public TcpClient clientSocket;

            public void RunClient()
            {
                //создаём классы потоков
                StreamReader readerStream = new StreamReader(clientSocket.GetStream());


                string result = readerStream.ReadToEnd();
                Invoke(new UpdateDisplayDelegate(UpdateDisplay),
                       new object[] { result });
                clientSocket.Close();          
            }

            private void Invoke(UpdateDisplayDelegate updateDisplayDelegate, object[] p)
            {
                throw new Exception("The method or operation is not implemented.");
            }

            protected delegate void UpdateDisplayDelegate(string text);      
        
        }

        public void UpdateDisplay(string text)
        {
            txtDisplay.Text = text;
        }       
    
    }

}

на клиенте прежний.

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

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

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

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


 




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


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

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