Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

потоки и сокеты

57K
08 апреля 2011 года
napukmaxep
15 / / 16.02.2011
Доброго времени.
Мне в одном проекте нужно реализовать общение между двумя программами через интернет. Много не нужно - буквально по одной строчке передавать. Нашел пример консольных tcp-сервера и клиента на System::Net::Sockets, попытался сделать по аналогии в формах(С++), получил зависание на методах ReadLine/Read, AcceptTcpClient. Пустил их по отдельным потокам(а правильно ли?) - зависание пропало, но и до конца всё не заработало. Так вот, прошу объяснить как решить такую задачу. Буду крайне признателен простенькому примеру в формах.
278
09 апреля 2011 года
Alexander92
1.1K / / 04.08.2008
Общий ход решения абсолютно правильный, вам необходима многопоточность. Что конкретно не работает?
57K
10 апреля 2011 года
napukmaxep
15 / / 16.02.2011
Сервер вроде как создаётся и ждёт подключения. Клиент вроде как видит сервер, ибо не падает. Но AcceptTcpClient, насколько я понял не проходит. Всё сделано очень криво. Мне бы наводочку на путь истинный. Общий ход решения понятен, но я не особо разобрался с System::Net::Sockets.
57K
12 апреля 2011 года
napukmaxep
15 / / 16.02.2011
собственно, что не так? ReadLine упорно даёт пустую строку


Код:
public delegate void WriteTextHandler(System::String^ text);

//блаблабла

        void WriteText(System::String^ text)
        {
            label1->Text = text;
        }

        void Read(System::Object^ o_client)
        {
            TcpClient^ client = (TcpClient^)o_client;

            StreamReader^ reader = gcnew StreamReader(client->GetStream());
            this->Invoke(gcnew WriteTextHandler(this, &Form1::WriteText), reader->ReadLine());    
                 label1->Text = reader->ReadLine();
            client->Close();
        }

        void Listen()
        {
            TcpListener^ server = gcnew TcpListener(3333);
            server->Start();

            while (true)
            {
                TcpClient^ client = server->AcceptTcpClient();
                Thread^ th = gcnew Thread(gcnew ParameterizedThreadStart(this, &Form1::Read));
                th->Start(client);
            }
        }


#pragma endregion
    private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {


                Thread^ th = gcnew Thread(gcnew ThreadStart(this, &Form1::Listen));
                th->Start();
                button1->Enabled = false;


            }
    private: System::Void button2_Click(System::Object^  sender, System::EventArgs^  e) {

            TcpClient^ client = gcnew TcpClient();
            client->Connect("localhost", 3333);

            if (client->Connected)
            {
                StreamWriter^ wr = gcnew StreamWriter(client->GetStream());                
                wr->WriteLine(textBox1->Text);
            }

            client->Close();

             }
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог