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

Невозможно зарегестрировать объект дважды

22.10.2015, 20:05. Показов 611. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Пишу хаб, есть клиент, который отправляет на сервер свои данные (Никнейм, ип порт и статус), и получает ответ, либо он не подключен, либо он в сети и в результате чего клиент получает список всех пользователей в сети. Сервер сериализует лист структур клиентов и отправляет их клиенту, а он в свою очередь десериализует обратно. И проблема в том, что при обработке данных клиентом (десериализации), происходит ошибка "Невозможно зарегестрировать объект дважды ". В инете ничего внятного не нашел, на МС сайте просто цитируют данную ошибку. может кто нибуть может помочь ?
Вот код сервера
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
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
namespace Trecker
{
 
    //[Serializable]
    //struct Client
    //{
    //    public string NickName;
    //    public string Ip;
    //    public int Port;
    //    public bool Status;
    //    public Client(string NickName, string Ip, int Port, bool Status)
    //    {
    //        this.NickName = NickName;
    //        this.Ip = Ip;
    //        this.Port = Port;
    //        this.Status = Status;
    //    }
    //}
    public partial class Form1 : Form
    {
        System.Net.Sockets.TcpListener server;
        bool flagForConnect = false;
        IPHostEntry host;
        List<Client> listOfClients;
        int port;
 
 
 
        public Form1()
        {
            InitializeComponent();
 
 
            port = 49999;
 
 
 
            host = Dns.GetHostByName(Dns.GetHostName());
 
            //meEndPoint = new IPEndPoint(host.AddressList[0], port);
 
            lblIpValue.Text = host.AddressList[0].ToString();
            lblPortValue.Text = port.ToString();
 
 
 
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
 
            if (flagForConnect == false)
            {
                // 1   2   3    4
                //Nick IP Port Status "
 
                button1.Text = "Выключить";
 
                flagForConnect = true;
 
                Task.Run(() =>
                {
                    try
                    {
 
                        server = new System.Net.Sockets.TcpListener(host.AddressList[0], port);
                        server.Start();
                        while (true)
                        {
                            //Получаем входное подключение
                            using (TcpClient client = server.AcceptTcpClient())
                            {
 
                                //MessageBox.Show("dfg"); 
                                //Получаем сетевой поток для чтения и записи
                                using (NetworkStream networkStream = client.GetStream())
                                {
                                    
 
                                        byte[] dataFromClient = new byte[100];
                                        networkStream.Read(dataFromClient, 0, dataFromClient.Length);
                                        string[] message = Encoding.UTF8.GetString(dataFromClient).Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
                                        message[3] = message[3].Replace("\0", "");
 
                                        #region Проверка ника
                                        //Если нет подобных имен в списке и статус сообщения коннект, то добавляем его в базу и делаем видимым
                                        if (message[3] == "Connect" && IsDublicate(message[0]) == false)
                                        {
                                            listOfClients = new List<Client>();
 
                                            foreach (var item in listOfClients)
                                            {
                                                ListViewItem lvi = new ListViewItem(new string[] { item.NickName, item.Ip });
                                                listView1.Items.Add(lvi);
 
                                            }
                                            listOfClients.Add(new Client(message[0], message[1], int.Parse(message[2]), true));
 
 
                                            //string response = "This nickname already exists";
 
                                            //byte[] data = Encoding.UTF8.GetBytes(response);
 
                                            //Отправка сообщения 
                                            //networkStream.Write(data, 0, data.Length);
                                            //Отправка сообщения 
                                            networkStream.Write(Serialization(listOfClients), 0, Serialization(listOfClients).Length);
 
 
                                            // List<Client> qwe = Deserialization(Serialization(listOfClients));
 
                                        }
                                        //Если есть такое имя в списке
                                        //if (message[3] == "Connect" && IsDublicate(message[0]) == true)
                                        //{
                                        //    //Сообщене для отправки клиенту
                                        //    string response = "This nickname already exists";
 
                                        //    byte[] data = Encoding.UTF8.GetBytes(response);
 
                                        //    //Отправка сообщения 
                                        //    stream.Write(data, 0, data.Length);
                                        //}
                                        #endregion
 
                                        #region Удаление клиента и  оповищение всех
                                        if (message[3] == "disconnection")
                                        {
                                            for (int i = 0; i < listOfClients.Count; i++)
                                            {
                                                if (listOfClients[i].NickName == message[0])
                                                {
                                                    listOfClients.RemoveAt(i);
                                                    break;
                                                }
                                            }
 
                                            //Перерисовка view
                                            foreach (var item in listOfClients)
                                            {
                                                ListViewItem lvi = new ListViewItem(new string[] { item.NickName, item.Ip });
                                                listView1.Items.Add(lvi);
 
                                            }
                                            string response = string.Format("Remove: {0}", message[0]);
 
                                            byte[] data = Encoding.UTF8.GetBytes(response);
 
                                            //Отправка сообщения 
                                            foreach (var item in listOfClients)
                                            {
                                                using (TcpClient tcpclient = new TcpClient())
                                                {
                                                    tcpclient.Connect(item.Ip, item.Port);
                                                    using (NetworkStream streamForObserver = tcpclient.GetStream())
                                                    {
                                                        streamForObserver.Write(data, 0, data.Length);
                                                    }
 
                                                }
                                            }
 
 
                                        }
                                        #endregion
                                    
                                }
                            }
                        }
 
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.Message);
                    }
                });
 
 
 
            }
            else
            {
                flagForConnect = false;
                button1.Text = "Включить";
                server.Stop();
            }
 
        }
        bool IsDublicate(string str)
        {
            if (listOfClients != null)
                foreach (var item in listOfClients)
                {
                    if (item.NickName == str)
                        return true;
 
 
                }
 
            return false;
        }
 
        byte[] Serialization(List<Client> clients)
        {
            BinaryFormatter formatter = new BinaryFormatter();
            MemoryStream stream = new MemoryStream();
 
            formatter.Serialize(stream, clients);
            return stream.ToArray();
        }
        //List<Client> Deserialization(byte[] serializedAsByte)
        //{
        //    MemoryStream stream = new MemoryStream();
        //    BinaryFormatter formatter = new BinaryFormatter();
        //    stream.Write(serializedAsByte, 0, serializedAsByte.Length);
        //    stream.Seek(0, SeekOrigin.Begin);
        //    return (List<Client>)formatter.Deserialize(stream);
        //}
 
        private void button2_Click(object sender, EventArgs e)
        {
 
        }
    }
}
Клиент

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
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
namespace Client
{
    //[Serializable]
    // struct Client
    // {
    //     public string NickName;
    //     public string Ip;
    //     public int Port;
    //     public bool Status;
    //     public Client(string NickName, string Ip, int Port, bool Status)
    //     {
    //         this.NickName = NickName;
    //         this.Ip = Ip;
    //         this.Port = Port;
    //         this.Status = Status;
    //     }
    // }
 
    public partial class Form1 : Form
    {
        string nickName, portOfServer, myPort, ip, status;
        string connectStr;
        IPHostEntry host;
        List<Clients.Client> listOfClients;
        bool flagForConnect = false;
        System.Net.Sockets.TcpListener server;
 
 
        public Form1()
        {
            InitializeComponent();
 
 
 
        }
 
        private void connect_Click(object sender, EventArgs e)
        {
            if (flagForConnect == false)
            {
 
                try
                {
                    host = Dns.GetHostByName(Dns.GetHostName());
 
 
 
                    //определение строки подключения
                    ip = host.AddressList[0].ToString();
                    nickName = textBox3.Text;
                    portOfServer = textBox2.Text;
                    myPort = textBox4.Text;
                    status = "Connect";
                    connectStr = nickName + ' ' + ip + ' ' + myPort + ' ' + status;
 
                    using (TcpClient client = new TcpClient())
                    {
 
                        client.Connect(ip, int.Parse(portOfServer));
 
                        using (NetworkStream networkStream = client.GetStream())
                        {
                            networkStream.Write(System.Text.Encoding.UTF8.GetBytes(connectStr), 0, System.Text.Encoding.UTF8.GetBytes(connectStr).Length);
 
                            byte[] data = new byte[1000];
                            StringBuilder response = new StringBuilder();
                            //MessageBox.Show(response.Length.ToString());
                            //while (networkStream.DataAvailable)
                            //{
                            do
                            {
                                int bytes = networkStream.Read(data, 0, data.Length);
 
                                response.Append(Encoding.UTF8.GetString(data, 0, bytes));
                            } while (networkStream.DataAvailable);
                            //}
 
 
                            if (response.ToString() == "This nickname already exists")
                            {
                                MessageBox.Show("Данный никнейм уже существует");
                                //MessageBox.Show("if");
                            }
                            else
                            {
                                //MessageBox.Show("else");
                                connect.Text = "Connected";
 
                                flagForConnect = true;
 
                                label5.Text = "Status : connected";
                                //MessageBox.Show("Client");
                                byte[] mas = new byte[response.Length];
                                for (int i = 0; i < response.Length; i++)
                                {
                                    mas[i] = (byte)response[i];
                                }
                                listOfClients = Deserialization(mas);
                            }
 
                           
                        }
                        client.Close();
 
                    }
                    //Если коннект есть то ставим на послушку
                    if (flagForConnect == true)
                    {
 
                        server = new System.Net.Sockets.TcpListener(host.AddressList[0], int.Parse(textBox4.Text));
                        server.Start();
 
                        while (true)
                        {
                            using (TcpClient client = server.AcceptTcpClient())
                            {
                                using (NetworkStream networkStream = client.GetStream())
                                {
 
                                }
                            }
                        }
                    }
 
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }
            else
            {
                flagForConnect = false;
                connect.Text = "Disconnected";
                server.Stop();
            }
 
        }
        List<Clients.Client> Deserialization(byte[] serializedAsByte)
        {
            MemoryStream stream = new MemoryStream(serializedAsByte);
            BinaryFormatter formatter = new BinaryFormatter();
            //stream.Write(serializedAsByte, 0, serializedAsByte.Length);
            stream.Seek(0, SeekOrigin.Begin);
 
            //formatter.Deserialize(stream);
            List<Clients.Client> mas = (List<Clients.Client>)formatter.Deserialize(stream);
 
            stream.Close();
            return mas;
        }
    }
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
22.10.2015, 20:05
Ответы с готовыми решениями:

Будет ли иметь доступ дважды унаследованный объект к исходному
Ребята, подскажите пожалуйста такую вещь. Если у меня класс А имеет конструктор с параметром, класс Б от него наследуется, в свою очередь...

Почему дважды вызванный рандомный метод дважды рандомит одинаково?
Взгляните, есть метод рандомной генерации матрицы. Мы его дважды вызываем, и дважды получаем одну и туже матрицу, т.е. две одинаковых перед...

Невозможно привести COM-объект типа Microsoft.Office.Interop.Word
Здравствуйте! Есть проблема из частых: &quot;вчера работало, сегодня нет&quot;. Моя программа сохраняла отчет в вордовский документ. Но теперь...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
22.10.2015, 20:05
Помогаю со студенческими работами здесь

Зарегестрировать GUIDS в реестре
Здравствуйте есть код написан на С++. То есть реализовал компонент(логика, сервер) через Interface IUnknown с функциями Release(), AddRef()...

Невозможно привести COM-объект
Добрый день господа программисты. Ломаю 2 недели голову как починить данный механизм. Есть функция для работы с Excel ...

Невозможно присвоить объект
Не разберусь в чем дело. Есть наприер так: Edi:array of tedit; Далее так: setlength(edi,length(edi)+1); ...

Объект невозможно переместить за пределы листа
Добрый день! Помогите, пожалуйста... При попытке добавить строку или столбец выдаётся сообщение &quot;Объект невозможно переместить за...

Ошибка: невозможно создать объект абстрактного класса
программа для заменны слова в файле, на введенное с клавы слово!реализовать нужно через интерфейс! ошибка в строчке Text edit; не...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru