Форум программистов, компьютерный форум, киберфорум
C++: Сети
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.62/13: Рейтинг темы: голосов - 13, средняя оценка - 4.62
 Аватар для Gus
26 / 37 / 10
Регистрация: 17.02.2009
Сообщений: 364

динамическая структура данных

23.02.2012, 13:46. Показов 2795. Ответов 28
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток, на данный момент я работаю над реализацией динамической структуры данных для работы с потоками, но, постоянно, как я пытаюсь обратится к функции члену структуры выходит ошибка
56 C:\Documents and Settings\Ìèõàèë\Ðàáî÷èé ñòîë\ServerCheb21\core.cpp `UserSend' has not been declared

Вот коды которые пригодятся для отладки.
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
//сама структура User
struct User{
       public:
       int UserSend(char buff[1024*5]);
       int indificator;
       int indifonline;
       bool Admin;
       bool Online;
       char Login[25];
       char Email[25];
       char IP[15];
       SOCKET UserSocket;
       };
//---------------------------------------------------------------
Где создаются динамические структуры
while((ClientSocket=accept(ServerSocket,(sockaddr*) &client_addr, &client_addr_size)))
{
ClientsCount++;
HOSTENT *hst;
hst=gethostbyname((char*)&client_addr.sin_addr);
DWORD thID;
usermem=new User[1];
int i;
for(i=0;i<sizeof(usermem);i++){if(usermem[i].IP==0){break;}}
strcat(usermem[i].IP,(char*)&client_addr.sin_addr);
usermem[i].UserSocket=ClientSocket;
usermem[i].indificator=i;
cout <<"Client CONNECTED !!!" << usermem[i].IP <<endl;
cout <<&usermem[i]<<endl;
CreateThread(0,0,ClientSession,&usermem[i],0,&thID);
//--------------------------------------------------------------------------
Функция отправки сообщения, пользователю, к которому принадлежит эта структура
int User::UserSend(char buff[1024*5])
{int i; i=send(UserSocket,buff,sizeof(buff),0);return i;}
//--------------------------------------------------------------------------
//Здесь происходит ошибка, ее я пометил символом $
DWORD WINAPI Cheb21::ClientSession(LPVOID user)
{
      Cheb21 ch;
      User *usermem;
      string str;
      //SOCKET SessionSocket;
      //SessionSocket=((SOCKET*) client_socket)[0];
      usermem=(User)user;
      char *buff;
      cout <<"Thread Started!"<<endl;
      send(SessionSocket,"HELLO",sizeof("HELLO"),0);
      while(int bytes_recv=recv(usermem.UserSocket,buff,sizeof(buff),0)&&bytes_recv!=SOCKET_ERROR)
      {
   $   usermem.UserSend(buff);
      Sleep(500);
      }
      ch.ClientsCount--;
      cout <<"Client Disconnect"<<endl;
      closesocket(SessionSocket);
      return 0;
}
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
23.02.2012, 13:46
Ответы с готовыми решениями:

Динамическая списочная структура, содержащая объекты классов, связанных наследованием
В общем. Есть базовый класс и 2 класса наследника. Нужно создать динамическую структуру(пусть это будет односвязный список) в который можно...

Динамическая структура данных С++
Всем огромный привет! :) Начали учить эту тему, ещё до конца не разобрался, а уже прогу делать надо. Вот задание: Дана очередь на основе...

Динамическая структура данных
Есть динамическая структура struct comp { char num; comp* next; //Ссылка на следущий элемент списка }; struct dyn_list {...

28
Жарю без масла
867 / 749 / 225
Регистрация: 13.01.2012
Сообщений: 1,702
23.02.2012, 13:54
покажите, где и как эта ф-я(UserSend) вызывается. скорее всего проблема там.

Не по теме:

вставляйте хотя бы читабельный код. глаза и мозг - не казенные

0
 Аватар для Gus
26 / 37 / 10
Регистрация: 17.02.2009
Сообщений: 364
23.02.2012, 14:00  [ТС]
C++
1
   $   usermem.UserSend(buff);
Вот, я написал в комментариях что пометил символом $
0
Жарю без масла
867 / 749 / 225
Регистрация: 13.01.2012
Сообщений: 1,702
23.02.2012, 14:03
usermem->UserSend(buff);
0
Псевдослучайный
1946 / 1146 / 98
Регистрация: 13.09.2011
Сообщений: 3,215
23.02.2012, 14:03
Цитата Сообщение от Gus Посмотреть сообщение
usermem=(User)user;
При этом usermem вообще-то указатель. А дальше ты пытаешься применить к нему . вместо ->
1
Жарю без масла
867 / 749 / 225
Регистрация: 13.01.2012
Сообщений: 1,702
23.02.2012, 14:07
кстати, эта проблема у вас везде

Добавлено через 1 минуту
usermem[i].IP должно быть usermem[i]->IP
usermem[i].UserSocket должно быть usermem[i]->UserSocket
usermem[i].indificator должно быть usermem[i]->indificator
и т.д.

Добавлено через 1 минуту
вот это
C++
1
cout <<&usermem[i]<<endl;
мне вообще не понятно. делает явно не то, что вы задумывали(хотя что вы задумали?)
0
 Аватар для Gus
26 / 37 / 10
Регистрация: 17.02.2009
Сообщений: 364
23.02.2012, 14:14  [ТС]
110 C:\Documents and Settings\Ìèõàèë\Ðàáî÷èé ñòîë\ServerCheb21\core.cpp base operand of `->' has non-pointer type `User'

Цитата Сообщение от retmas Посмотреть сообщение
Код C++
1
cout <<&usermem[i]<<endl;
мне вообще не понятно. делает явно не то, что вы задумывали(хотя что вы задумали?)
Этим я задумал проверку, через telnet я подключаюсь к серверу, и смотрю не используются ли одинаковые структуры для всех пользователей
0
Жарю без масла
867 / 749 / 225
Регистрация: 13.01.2012
Сообщений: 1,702
23.02.2012, 14:25
usermem=(User*)user;

Добавлено через 1 минуту
бида-пичаль
C++
1
2
3
4
5
6
usermem=new User[1];
int i;
for(i=0;i<sizeof(usermem);i++){if(usermem[i].IP==0){break;}}
strcat(usermem[i].IP,(char*)&client_addr.sin_addr);
usermem[i].UserSocket=ClientSocket;
usermem[i].indificator=i;
создаете массив из 1 элемента, а заполняете вероятно 5-ый (если sizeof(void*)==4)

Добавлено через 5 минут
Цитата Сообщение от Gus Посмотреть сообщение
Этим я задумал проверку, через telnet я подключаюсь к серверу, и смотрю не используются ли одинаковые структуры для всех пользователей
не пойму как это связано с выводом адреса структуры
Цитата Сообщение от Gus Посмотреть сообщение
cout <<&usermem[i]<<endl;
или у вас одна структура(глобальная) на все про все?.. ну ладно, из того, что есть - выводы делать на счет этого не ок
0
 Аватар для Gus
26 / 37 / 10
Регистрация: 17.02.2009
Сообщений: 364
23.02.2012, 14:58  [ТС]
да, в последнее время что то тормоз берет надомной вверх, Среда Dev-cpp негодуэ некомпилит проект вообще) хоть там накосячить по полной программе, Liniking... и исходый файл даже выходит, притом, я удалял выходной файл а он появляется снова)

Добавлено через 29 минут
Решить проблему с функцией не удалось
0
Жарю без масла
867 / 749 / 225
Регистрация: 13.01.2012
Сообщений: 1,702
23.02.2012, 15:02
выложите, что вышло
1
 Аватар для Gus
26 / 37 / 10
Регистрация: 17.02.2009
Сообщений: 364
23.02.2012, 18:41  [ТС]
а все разобралсё) и компилить Dev-cpp начал, странно это все)

Добавлено через 16 минут
Только вот почему то при приеме с сокета завершается соединение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
DWORD WINAPI Cheb21::ClientSession(LPVOID user)
{
      Cheb21 ch;
      User *usermem;
      string str;
      //SOCKET SessionSocket;
      //SessionSocket=((SOCKET*) client_socket)[0];
      usermem=(User *)user;
      char *buff;
      cout <<"Thread Started!"<<endl;
      send(usermem->UserSocket,"HELLO",sizeof("HELLO"),0);
      while(int bytes_recv=recv(usermem->UserSocket,buff,sizeof(buff),0)&&bytes_recv!=SOCKET_ERROR)
      {
      usermem->UserSend(buff);
      Sleep(500);
      }
      ch.ClientsCount--;
      cout <<"Client Disconnect"<<endl;
      delete usermem;
      return 0;
}
0
Жарю без масла
867 / 749 / 225
Регистрация: 13.01.2012
Сообщений: 1,702
23.02.2012, 18:50
при каком условии оно должно у вас закрываться?
и еще, получаем от клиента bytes_recv байт в buf, но тут же отсылаем sizeof(buff) байт. это нормально?
0
 Аватар для Gus
26 / 37 / 10
Регистрация: 17.02.2009
Сообщений: 364
23.02.2012, 18:53  [ТС]
Да, это исходник Эхо сервера, учусь юзать сокеты, хочу посмотреть как это работает.
0
Жарю без масла
867 / 749 / 225
Регистрация: 13.01.2012
Сообщений: 1,702
23.02.2012, 18:56
вы не поняли. всегда ли bytes_recv == sizeof(buff)?
и когда соединение закрывается по вашей задумке?
0
 Аватар для Gus
26 / 37 / 10
Регистрация: 17.02.2009
Сообщений: 364
23.02.2012, 19:05  [ТС]
когда bytes_recv==SOCKET_ERROR
зы задумка не моя, а некого автора, кому принадлежит сей исходник)
0
Жарю без масла
867 / 749 / 225
Регистрация: 13.01.2012
Сообщений: 1,702
23.02.2012, 19:09
Цитата Сообщение от Gus Посмотреть сообщение
когда bytes_recv==SOCKET_ERROR
ну это уж вряд ли
Цитата Сообщение от Gus Посмотреть сообщение
задумка не моя, а некого автора, кому принадлежит сей исходник)
то есть вы - в роли испорченного телефона?
0
 Аватар для Gus
26 / 37 / 10
Регистрация: 17.02.2009
Сообщений: 364
23.02.2012, 19:31  [ТС]
нет, я в роли ученика, ожидающего подсказки, либо указания истинного пути в winsock2
0
Жарю без масла
867 / 749 / 225
Регистрация: 13.01.2012
Сообщений: 1,702
23.02.2012, 19:47
пока не было главного - ответа на вопрос
Цитата Сообщение от retmas Посмотреть сообщение
при каком условии соединение должно у вас закрываться?
а вообще начинать надо с изучения как передаются данные по сети и особенностей протоколов передачи.
и из вашего куска кода мало что ясно. но ошибки есть
0
 Аватар для Gus
26 / 37 / 10
Регистрация: 17.02.2009
Сообщений: 364
23.02.2012, 19:48  [ТС]
я на практике осваиваю, так немного теории освоил вроде бы достаточно)
Так какой наилучший вариант исполнения сей "кода"
0
Жарю без масла
867 / 749 / 225
Регистрация: 13.01.2012
Сообщений: 1,702
23.02.2012, 20:02
Цитата Сообщение от Gus Посмотреть сообщение
когда bytes_recv==SOCKET_ERROR
исходя из этого, вряд ли
Цитата Сообщение от Gus Посмотреть сообщение
освоил вроде бы достаточно
что вы хотите, чтобы вам ответили, если вы спрашиваете
Цитата Сообщение от Gus Посмотреть сообщение
почему то при приеме с сокета завершается соединение
но при этом никак не хотите ответить
Цитата Сообщение от retmas Посмотреть сообщение
при каком условии соединение должно у вас закрываться?
Добавлено через 5 минут
эхо сервер отсылает столько байт, сколько получил. если он получил bytes_recv байт, то и отослать он должен bytes_recv байт. и bytes_recv не обязательно должно равняться sizeof(buff)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
23.02.2012, 20:02
Помогаю со студенческими работами здесь

Динамическая структура данных в С++
Определить функции вставки нового звена в односвязный линейный список, удаления звена из списка, просмотра содержимого списка. как вот...

Динамическая структура данных
Дано type строка=array of char; дата=record число:1..31; месяц:1..12; год:1900..1979 end;анкета=record фамилия:строка;пол:(муж,...

Динамическая структура данных
Нужна помощь с динамическими структурами данных: Написать программу, которая сохраняет элементы с помощью динамической структуры...

Динамическая структура данных
В динамической памяти разместить массив записей следующей структуры: наименование товара, количество на складе, цена единицы продукции,...

Динамическая структура данных. freePascal
Разместить в динамической памяти вещественный массив из 10 элементов и распечатать его в обратной последовательности Проблема в том, что...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
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 На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru