Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
62 / 187 / 31
Регистрация: 14.02.2013
Сообщений: 1,716

TCP сервер, не выполняется BeginAccept

03.12.2023, 23:49. Показов 1571. Ответов 25
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Разбираюсь с NET в шарпе. Набросал простенький TCP сервер на сокете собственно сервер запускается и спокойно к нему подключается TCP клиент это видно в программе Tcpview но метод BeginAccept не в какую не хочет вызывать асинхронный колбек, System.AsyncCallback подскажите куда копать?

Кликните здесь для просмотра всего текста
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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net.Sockets;
using System.Net;
using System.IO;
using System.Threading;
namespace WindowsFormsApplication2
{
    public partial class Form1 : Form
    {
        Int32 number = 10, port = 6198;
        IPAddress[] Ipp;
        IPHostEntry Entr;
        Socket Soc = null;
        IPEndPoint End;
        ManualResetEvent Mre = new ManualResetEvent(false);
        AsyncCallback Acb = new AsyncCallback(Soc_init);
        
        public Form1()
        {
            InitializeComponent();
            Application.ApplicationExit += new EventHandler(OnApplicationExit); //для события при закрытии программы
        }
        private void OnApplicationExit(object sender, EventArgs e)                                      //Событие при закрытии программы
        {
            Soc.Close();
            
        }
        public void Form1_Load(object sender, EventArgs e)
        {
            string h_name = Dns.GetHostName();
            Entr = Dns.Resolve(h_name);
            listBox2.Items.Add("Имя вашего хоста "+h_name);
            Ipp = Entr.AddressList;
            comboBox1.Items.AddRange(Ipp);
            comboBox1.SelectedIndexChanged += Combo_Box_1;
            textBox1.Text = number.ToString();
            textBox2.Text = port.ToString();
        }
        public void Combo_Box_1(object sender, EventArgs e)                                 //Выполняет событие для выбора из выподающего списка comboBox1
        {
            listBox1.Items.Add(String.Format("{0}", comboBox1.SelectedIndex));
            Soc = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            End = new IPEndPoint(Ipp[comboBox1.SelectedIndex], port);
            Soc.Bind(End);
 
        }
        public void listBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
 
        }
 
        public void button1_Click(object sender, EventArgs e)
        {
            Soc.Listen(number);
            Soc.BeginAccept(Acb, Soc);
            Mre.WaitOne();
        }
        
        public static void Soc_init(IAsyncResult ar)
        {
            var pp = new Form1();
            pp.listBox1.Items.Add("Кто то поделючился");
 
        }
 
 
 
        private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!(Char.IsDigit(e.KeyChar)))
            {
                if (e.KeyChar != (char)Keys.Back)
                {
                    e.Handled = true;
                }
            }
        }
 
        private void textBox1_TextChanged(object sender, EventArgs e)
        {
            if (textBox1.Text == "")
                textBox1.Text = 0.ToString();
            number = Int32.Parse(textBox1.Text);
            textBox1.Text = number.ToString();
            if (number < 10)
            {
                return;
            }
            textBox1.Text = 10.ToString();
            textBox1.SelectionStart = textBox1.Text.Length;
        }
 
        private void textBox2_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!(Char.IsDigit(e.KeyChar)))
            {
                if (e.KeyChar != (char)Keys.Back)
                {
                    e.Handled = true;
                }
            }
        }
 
        private void textBox2_TextChanged(object sender, EventArgs e)
        {
            if (textBox2.Text == "")
                textBox2.Text = 0.ToString();
            port = Int32.Parse(textBox2.Text);
            textBox2.Text = port.ToString();
            if (port < 65000)
            {
                return;
            }
            textBox2.Text = 65000.ToString();
            textBox2.SelectionStart = textBox2.Text.Length;
        }
 
    }
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
03.12.2023, 23:49
Ответы с готовыми решениями:

Вылетает сервер (BeginAccept/Socket) при попытке соединения с ним
Привет всем. У меня вылетает асинхронный сервер при попытке соединения с ним. Не могу понять причину. Программа компилируется и запускается...

Написать tcp-сервер, который играет в шахматы с другим tcp-сервером
Здравствуй, помогите в написании программы: Написать tcp-сервер, который играет в шахматы с другим tcp-серверов. Доска одномерная ...

Если сервер TCP то и клиент тоже должен быть TCP?
Я полный новичок И я так понимаю есть TCP client (Sockets), TCP server (Sockets), и ClientSocket (ScktComp), ServerSocket (ScktComp) ...

25
Эксперт .NET
 Аватар для Wolfdp
3790 / 1767 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
04.12.2023, 23:22
Студворк — интернет-сервис помощи студентам
Andreyip,
https://learn.microsoft.com/en... ew=net-8.0
This is a compatibility API. We don't recommend using the APM (Begin* and End*) methods for new development. Instead, use the Task-based equivalents.
Если очень упрощенно -- Task позволяет организовывать код гораздо удобней, чем через AsyncCallback.
0
62 / 187 / 31
Регистрация: 14.02.2013
Сообщений: 1,716
06.12.2023, 20:28  [ТС]
Вроде не чего сложного подключаюсь к серверу с двух разных хостов и шлю сообщения, сообщения доходят в ошибку не вваливаюсь.
0
62 / 187 / 31
Регистрация: 14.02.2013
Сообщений: 1,716
06.12.2023, 20:48  [ТС]
Видео к коменту выше
https://youtu.be/wd2Wz7MYq6s
0
Эксперт .NET
 Аватар для Wolfdp
3790 / 1767 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
06.12.2023, 21:08
Цитата Сообщение от VladimirU Посмотреть сообщение
Вроде не чего сложного подключаюсь к серверу с двух разных хостов и шлю сообщения, сообщения доходят в ошибку не вваливаюсь.
Не совсем понятно что вы этим хотите сказать.
0
62 / 187 / 31
Регистрация: 14.02.2013
Сообщений: 1,716
06.12.2023, 21:26  [ТС]
Wolfdp, я об этом. Копал в интернете про "динамический потокозащещенный список" и "синхронизацию в многопоточной среде" не чего не нашёл.
0
Эксперт .NET
 Аватар для Wolfdp
3790 / 1767 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
06.12.2023, 21:57

Не по теме:

мда... внезапно, ни АИ, ни гугл не смогли сопоставить "потоко-защищенный список" с "потокобезопасным"...



VladimirU,
Потокобезопасные коллекци
правда тут полного аналога List<T> нет, что несколько затрудняет сделать просто Remove для конкретного элемента.

Я обычно создавал свой класс позволяющий добавлять/удалять/очищать, где внутри простой List<T>, а синхронизацию обеспечивал через ReaderWriterLock. Ну либо использовать потокобезопасный дикшинари, там есть TryRemove и в целом для списка подключений норм вариант.

Дополнительно стоит почитать про Многопоточность, а в идеале и про Aсинхронное программирование

Забегая наперед, для прикладной работы с TCP также стоит почитать про работу с Stream, точнее про (де)сериализацию данных в поток и обратно. Для начала достаточно будет рассмотреть работу с Json и какую-нибудь бинарную (возможно protobuff). Это позволит очень легко и гибко организовать передачу данных, чтобы на входе и выходе были объекты, а не тупо наборы байт, с которыми фиг пойми как работать.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
06.12.2023, 21:57

как создать TCP клиент, TCP сервер ? На С++
Очень нужна помощь!Как написать TCP клиент, TCP сервер. Например,клиент вводит строку с клавиатуры и отсылает ее серверу.только перед...

Написать TCP-клиент и TCP-сервер.
Написать TCP-клиент и TCP-сервер. Учтите наличие сложностей написания программы под Windows, связанных с переносимостью и Windows-функцией...

Связь TCP сервер - сервер-клиент на node.js - браузер. нужна коррекция
Суть проблемы: написал по примерам программу, с помощью которой можно с браузера отправить команду на TCP сервер и получить ответ. Все...

TCP Клиент-Сервер.При передачи данных с клиента на сервер происходит зацикливание
Я пишу TCP клиент-сервер в котором сервер отправляет клиенту путь к ТЕКСТОВОМУ файлу.Если у клиента есть этот файл то он начинает...

Tcp ip клиент-сервер C++ сервер выводит мусор
server # include &lt;sys/types.h&gt; # include &lt;iostream&gt; # include &lt;winsock2.h&gt; # include &lt;stdlib.h&gt; # pragma comment (lib,...


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

Или воспользуйтесь поиском по форуму:
26
Ответ Создать тему
Новые блоги и статьи
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru