Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 1
Регистрация: 04.10.2019
Сообщений: 40

Как отправить сообщение серверу через Socket в установленном соединении?

07.11.2019, 06:52. Показов 994. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет, я новичок и не могу разобраться с примерами из интернета, как мне отправить какое либо сообщение на сервер, а на сервере принять его и обработать... Все мои попытки вызывали исключения типа "уже установлено соединение а вы пытаетесь заново его вызвать" или же вовсе ничего не происходило.... Как мне в этом же потоке на Stream-е отправлять сообщения серверу в реальном времени?

Сервер
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
void connectclients()
        {
            IPEndPoint ipPoint = new IPEndPoint(IPAddress.Parse(IP), Port);
             Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            
            try
            {
                socket.Bind(ipPoint);
                socket.Listen(5); 
                this.BeginInvoke(new Action(delegate()
                {
                    textBox1.Text += "Ожидаем подключения клиентов...." + Environment.NewLine;
                }));
 
                while (true)
                {
                    Socket handler = socket.Accept();
                    // получаем сообщение
                    StringBuilder builder = new StringBuilder();
                    int bytes = 0; // количество полученных байтов
                    byte[] data = new byte[1024]; // буфер для получаемых данных
                    do
                    {
                        bytes = handler.Receive(data);
                        builder.Append(Encoding.ASCII.GetString(data));
      
                    }
 
                    while (handler.Available > 0);
                    
                    this.BeginInvoke(new Action(delegate()
                    {
                        textBox1.Text += Environment.NewLine + DateTime.Now.ToShortTimeString() + ": " + builder.ToString();
                        Numconnect++;
                        label8.Text = Convert.ToString(Numconnect);
                    }));
                    // отправляем ответ
                    string message = "Подключение установлено...";
                    data = Encoding.Unicode.GetBytes(message);
                    handler.Send(data);
                    handler.Shutdown(SocketShutdown.Both);
                    handler.Close();
 
 
                   
 
                }
 
            }
            catch (Exception ex)
            {
                textBox1.Text += ex.Message;
            }
   
     }
Клиент
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
...
 private void btnEnviar_Click_1(object sender, EventArgs e)
        {
             IP = textBox1.Text;
             Port = Convert.ToInt32(textBox2.Text);
             nameclient = textBox3.Text;
             Thread myThread = new Thread(connect);
             myThread.Start();
             button1.Visible = true;
        }
          void connect()
        {
            try
            {
            Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            socket.Connect(IP, Port);
            byte[] buffer = Encoding.ASCII.GetBytes(nameclient);
            socket.Send(buffer);
                // получаем ответ
                var data = new byte[256]; // буфер для ответа
                StringBuilder builder = new StringBuilder();
                int bytes = 0; // количество полученных байт
 
                do
                {
                    bytes = socket.Receive(data, data.Length, 0);
                    builder.Append(Encoding.Unicode.GetString(data, 0, bytes));
                }
                while (socket.Available > 0);
                this.BeginInvoke(new Action(delegate()
                {
                    label5.Text = builder.ToString();
                    if (timer1.Enabled == true)
                        timer1.Enabled = false;
                    else
                    {
                        timer1.Enabled = true;
                    }
                }));
 
                // закрываем сокет
                socket.Shutdown(SocketShutdown.Both);
                socket.Close();
            }
            catch
            {
 
            }    
        }
Вот отрывки из моего кода, куда и каким способом мне нужно вставить отправку и приемку сообщения, я примерно полагаю что осуществления приемки будет через цикл While и выполнение действия, можно ли в этом потоке слать сообщения вообще? Или его нужно в новом потоке открывать? Подскажите пожалуйста...
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
07.11.2019, 06:52
Ответы с готовыми решениями:

Как отправлять запросы серверу через socket, но используя приложение
Есть приложение NetChess в котором можно играть по сети в шахматы. Как сделать запрос, чтобы он шел как бы от самого приложения? import...

Как отправить byte[] с сервера клиенту через socket
Как отправить byte с сервера клиенту через socket? Я могу отправить с клиента на сервер вот так. Клиент: string ipadr =...

Apache работает только при установленном соединении с инетом
Привет скажите пожалуйста почему апач работает только тогда если установлено соеденение с интернетом ???

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
07.11.2019, 06:52
Помогаю со студенческими работами здесь

Как отправить текст клиенту которые не присоединен к серверу зная его ip и порт через ServerSocket?
Как отправить текст клиенту которые не присоединен к серверу зная его ip и порт через ServerSocket?

Не подключается к серверу через Socket
Привет. Подключаюсь к серверу так: try { ShowMessage("try"); //InetAddress ipAddress = InetAddress.getByName(HOST); //...

Подключение к серверу через socket
Сделал рабочие клиент и сервер, на локалхост на моем компе клиент подключается, все отлично работает. Решил попробовать соединиться с...

Помогите подключиться к Socket серверу через Proxy C#
Проблема в следующем. Есть клиент - серверное приложение написанное на которое работаете на основе System.Net.Socket и все бы хорошо но...

Несколько клиентов к одному серверу через Socket
У меня не получается подключить больше одного клиента к одному серверу. Для тестирования использую корпоративную сеть. Хочу просто...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. fontSize": 18, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations":. . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru