5 / 5 / 4
Регистрация: 20.11.2015
Сообщений: 125
1

Чат на сокетах

03.01.2016, 19:05. Показов 4992. Ответов 12

Author24 — интернет-сервис помощи студентам
Проблема в работе чата: отправляется только первое сообщение, а дальше всё зависает. Предположительно надо использовать асинхронные функции или что-то ещё в том же духе, но понятия не имею как.
Код сервера:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
private async void button1_Click(object sender, EventArgs e)
{
    IPHostEntry ipHost = Dns.GetHostEntry("localhost");
    IPAddress ipAddr = ipHost.AddressList[0];
    IPEndPoint ipEndPoint = new IPEndPoint(ipAddr, 11000);
    //Создаем сокет Tcp/Ip
    Socket sListener = new Socket(ipAddr.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
    //Назначаем сокет локальной конечной точке и слушаем входящие сокеты
    richTextBox1.AppendText("Ожидаем соединение через порт " + ipEndPoint);
    try
    {
        sListener.Bind(ipEndPoint);
        sListener.Listen(10);
        //Начинаем слушать соединения                               
        Socket handler = sListener.Accept();
        string data = null;
        //Мы дождались клиента, пытающегося с нами соединиться
        byte[] bytes = new byte[1024];
        int bytesRec = handler.Receive(bytes);
        data += Encoding.UTF8.GetString(bytes, 0, bytesRec);
        //Показываем данные на консоли
        richTextBox1.AppendText("Полученный текст: " + data + "\n\n");
        //Отправляем ответ клиенту
        string reply = "Отправленное сообщение " + data;
        byte[] msg = Encoding.UTF8.GetBytes(reply);
        handler.Send(msg);
        handler.Shutdown(SocketShutdown.Both);
        handler.Close();                
    }
    catch (Exception ex)
    {
        richTextBox1.AppendText(ex.ToString());
    }
}
Код клиента не думаю что стоит скидывать.

Добавлено через 3 часа 34 минуты
Все вымерли чтоль?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.01.2016, 19:05
Ответы с готовыми решениями:

Не работает чат на сокетах
Привет. Есть чат на сокетах но, при попытке коннекта программа просто зависает. Уже окончательно...

Чат на сокетах (TCP)
как реализовать? в принципе работал с сокетами, но не понимаю как конкретно чат делается? ведь...

Чат на сокетах
Начал работу с сетью, пробую написать небольшой чат на tcp сокетах, на стороне сервера всё...

Чат на сокетах
Здравствуйте, форумчане. Сейчас занялся написанием чата на сокетах. Всё вроде бы хорошо, но уперся...

12
TheGreatCornholio
1254 / 732 / 285
Регистрация: 30.07.2015
Сообщений: 2,408
03.01.2016, 19:33 2
Цитата Сообщение от NikkuL Посмотреть сообщение
Все вымерли чтоль?
Ага, после новогодней ночи.
1
5 / 5 / 4
Регистрация: 20.11.2015
Сообщений: 125
04.01.2016, 00:44  [ТС] 3
Цитата Сообщение от Woldemar89 Посмотреть сообщение
Ага, после новогодней ночи.
И ни кто не поможет?
Эхх... Тлен, пичаль, дипрессия
0
Эксперт .NET
5531 / 4296 / 1216
Регистрация: 12.10.2013
Сообщений: 12,329
Записей в блоге: 2
04.01.2016, 08:32 4
Цитата Сообщение от NikkuL Посмотреть сообщение
И ни кто не поможет?
С сокетами не помогу, но если устроит чат на WCF, то сюда посмотрите.

Добавлено через 7 часов 41 минуту
 Комментарий модератора 
NikkuL, не создавайте стопицот тем с одним вопросом. Быстрее вам от этого не ответят!
1
TheGreatCornholio
1254 / 732 / 285
Регистрация: 30.07.2015
Сообщений: 2,408
04.01.2016, 10:44 5
Цитата Сообщение от NikkuL Посмотреть сообщение
И ни кто не поможет?
Тема избита ногами до состояния близкого к летальному, проще рабочие примеры поискать и разобрать.
1
5 / 5 / 4
Регистрация: 20.11.2015
Сообщений: 125
05.01.2016, 00:21  [ТС] 6
Цитата Сообщение от Woldemar89 Посмотреть сообщение
поискать и разобрать
Либо я плохо ищу, либо я плохо разбираю -__-
0
TheGreatCornholio
1254 / 732 / 285
Регистрация: 30.07.2015
Сообщений: 2,408
05.01.2016, 07:24 7
Цитата Сообщение от NikkuL Посмотреть сообщение
Либо я плохо ищу, либо я плохо разбираю -__-
По этим ссылкам примеры разбирал?

http://metanit.com/sharp/net/3.2.php
http://professorweb.ru/my/csha... l3/3_2.php

Цитата Сообщение от NikkuL Посмотреть сообщение
отправляется только первое сообщение, а дальше всё зависает.
Цикла обработки сообщений не вижу.
1
5 / 5 / 4
Регистрация: 20.11.2015
Сообщений: 125
05.01.2016, 23:56  [ТС] 8
Цитата Сообщение от Woldemar89 Посмотреть сообщение
Цикла обработки сообщений
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
private void button1_Click(object sender, EventArgs e)
{
    //Назначаем сокет локальной конечной точке и слушаем входящие сокеты
    richTextBox1.AppendText("Ожидаем соединение через порт " + ipEndPoint);
    sListener.Bind(ipEndPoint);
    sListener.Listen(0);
    handler = sListener.Accept();
    while (true)
    {
        data = null;
        //Мы дождались клиента, пытающегося с нами соединиться
        byte[] bytes = new byte[1024];
        int bytesRec = handler.Receive(bytes);
        data += Encoding.UTF8.GetString(bytes, 0, bytesRec);
        richTextBox1.AppendText("Принято:" + data + "\n\n");
        //Отправляем ответ клиенту
        string reply = "Доставлено!";
        byte[] msg = Encoding.UTF8.GetBytes(reply);
        handler.Send(msg);
    }
}
P.S.: немного переработал приложение. Новая ошибка - форма сервера просто висит, хотя должна выводить в richTextBox сообщения от клиента, но сервер посылает ответные сообщения клиенту.

Цитата Сообщение от Woldemar89 Посмотреть сообщение
http://metanit.com/sharp/net/3.2.php
http://professorweb.ru/my/csha... l3/3_2.php
С последнего и писал, но фишка то в том что консоль как и так, как бы "висит". А у меня то на формах.

Я конечно особо не в курсе, но наверно есть вариант использования потоков? Но, скажу честно, опыта с ними мало.

Добавлено через 15 минут
Запихал весь код выше с кнопки в функции conn, далее запили поток, теперь при нажатии на кнопку ничего не зависает, клиент получает сообщения о доставке от сервера, но проблема с выводом сообщений от клиента осталась - напрямую обратиться к richTextBox из потока нельзя. Как же тогда вывести сообщение клиента из потока?
0
TheGreatCornholio
1254 / 732 / 285
Регистрация: 30.07.2015
Сообщений: 2,408
06.01.2016, 10:46 9
Лучший ответ Сообщение было отмечено NikkuL как решение

Решение

Цитата Сообщение от NikkuL Посмотреть сообщение
напрямую обратиться к richTextBox из потока нельзя
C#
1
Form.CheckForIllegalCrossThreadCalls = false; //так лучше не надо, но типа можно
C#
1
this.Invoke(new Action(() => {richTextBox1.Text += text;})); //так должно прокатить
Цитата Сообщение от NikkuL Посмотреть сообщение
А у меня то на формах.
Ну так и ищи примеры на формах!!!

Цитата Сообщение от NikkuL Посмотреть сообщение
но наверно есть вариант использования потоков?
Простые потоки, сокеты, сокеты с потоками, обращение к контролам из другого потока -
темы, такие же заезженные, как и вывод матрицы у студентов, перестань меня пытать уже
Решений полно, что в инете, что на форуме.
1
TheGreatCornholio
1254 / 732 / 285
Регистрация: 30.07.2015
Сообщений: 2,408
06.01.2016, 11:00 10
Цитата Сообщение от Woldemar89 Посмотреть сообщение
Ну так и ищи примеры на формах
Пошагово.

1. Тыц.
2. Первая ютубовская ссылка.
3. Download link под видео.
4. Скачать сможешь?

Ну и, собственно говоря, итог... Это было несложно? Ведь так?
Миниатюры
Чат на сокетах  
2
5 / 5 / 4
Регистрация: 20.11.2015
Сообщений: 125
06.01.2016, 14:17  [ТС] 11
Цитата Сообщение от Woldemar89 Посмотреть сообщение
3. Download link под видео.
Знаю я задолбал
По ссылке выкидывает ошибку 404, но впрочем я уже разобрался со всем, благодарю
0
TheGreatCornholio
1254 / 732 / 285
Регистрация: 30.07.2015
Сообщений: 2,408
06.01.2016, 14:21 12
Цитата Сообщение от NikkuL Посмотреть сообщение
По ссылке выкидывает ошибку 404
У меня все норм.
Цитата Сообщение от NikkuL Посмотреть сообщение
но впрочем я уже разобрался со всем
Воткнул в свою прогу this.Invoke(new Action(() => {richTextBox1.Text += text;})); ?
Цитата Сообщение от NikkuL Посмотреть сообщение
благодарю
Да пожалуйста
1
5 / 5 / 4
Регистрация: 20.11.2015
Сообщений: 125
08.01.2016, 00:18  [ТС] 13
Цитата Сообщение от Woldemar89 Посмотреть сообщение
Воткнул
Оно самое!

Добавлено через 14 минут
Цитата Сообщение от Woldemar89 Посмотреть сообщение
3. Download link под видео.
И с этим тож разобрался: пришлось прокси врубать.
0
08.01.2016, 00:18
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.01.2016, 00:18
Помогаю со студенческими работами здесь

Чат на сокетах
Здравствуйте. Решил написать не большой чат на JAVA. Опыта работы в JAVA немного. Собственно решил...

Чат на сокетах
Я создаю чат на С ++, только такой в котором 1 сервер который как и клиент также может отправлять и...

Чат на сокетах
Здрасьте. Знаю, что тема до невозможности бородатая, но возникла необходимость создания программы...

Чат на сокетах
Здравствуйте, хочу сделать чат на PHP с использованием сокетов. С самими сокетами я познакомился,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru