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

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

23.02.2012, 13:46. Показов 2802. Ответов 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
 Аватар для Gus
26 / 37 / 10
Регистрация: 17.02.2009
Сообщений: 364
23.02.2012, 20:03  [ТС]
Студворк — интернет-сервис помощи студентам
При условии того, что клиент разорвал соединение с сервером
0
Жарю без масла
867 / 749 / 225
Регистрация: 13.01.2012
Сообщений: 1,702
23.02.2012, 20:22
ну это очевидно.
я имею ввиду по-вашему соединение закрыто досрочно? как у вас клиент определяет, когда закрыть соединение. и еще раз обращаю внимание на то, что
Цитата Сообщение от retmas Посмотреть сообщение
получаем от клиента bytes_recv байт в buf, но тут же отсылаем sizeof(buff) байт...
если он получил bytes_recv байт, то и отослать он должен bytes_recv байт. и bytes_recv не обязательно должно равняться sizeof(buff)
Добавлено через 5 минут
Цитата Сообщение от Gus Посмотреть сообщение
задумка не моя, а некого автора, кому принадлежит сей исходник
если уж изучаете, пишите сами с 0, изучая особенности соединений/приема соединений, приема/отправки данных и закрытия соединений. а править "то - незнамо что" не ок
1
 Аватар для Gus
26 / 37 / 10
Регистрация: 17.02.2009
Сообщений: 364
23.02.2012, 21:49  [ТС]
а если можно поконкретнее, моск уже спит а доделать желательно б))
0
Жарю без масла
867 / 749 / 225
Регистрация: 13.01.2012
Сообщений: 1,702
23.02.2012, 22:02
поконкретнее - удалите все, и напишите заново, но с пониманием происходящего. и не копируйте то, что вы выложили сюда(как впрочем и то, что осталось за кадром), иначе снова получите кучу непонятных и чужих ошибок.
0
 Аватар для Gus
26 / 37 / 10
Регистрация: 17.02.2009
Сообщений: 364
23.02.2012, 22:09  [ТС]
Ну так переписать цикл на нужный лад ведь можно?) Если не сложно разумеется.
0
Жарю без масла
867 / 749 / 225
Регистрация: 13.01.2012
Сообщений: 1,702
23.02.2012, 22:12
боюсь только циклом не обойдешься
заливайте сюда весь проект.
0
 Аватар для Gus
26 / 37 / 10
Регистрация: 17.02.2009
Сообщений: 364
23.02.2012, 22:25  [ТС]
Скопировал из поста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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;
}
}
консоль пишет Thread Started) при подключении, но не выводит Client Disconnect при выбрасывании клиента)

Добавлено через 3 минуты
Вот на всякий случай всё)
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
DWORD WINAPI Cheb21::ClientSession(LPVOID user)
{
      Cheb21 ch;
      User *usermem;
      string str;
      int bytes_recv;
      //SOCKET SessionSocket;
      //SessionSocket=((SOCKET*) client_socket)[0];
      usermem=(User *)user;
      char *buff;
      cout <<"Thread Started!"<<endl;
      send(usermem->UserSocket,"HELLO",sizeof("HELLO"),0);
      while(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;
}
//-----------------------------------------------------------------------------------------------------------------------------------------------
bool Cheb21::StartServer()
{
Config cfg;
WSADATA WsaData;
if(WSAStartup(0x202,&WsaData)!=0){cout <<"WSAStartup: fail."<<endl; return false;}else{cout <<"WSAStartup: OK"<<endl;}
 
     ServerSocket=socket(AF_INET,SOCK_STREAM,0);
     if(ServerSocket==INVALID_SOCKET){cout <<"Create socket: FAIL."<<endl; return false;}else{cout <<"Create socket: OK"<<endl;}
     sockaddr_in serv_addr;
     serv_addr.sin_family=AF_INET;
     serv_addr.sin_port=htons(50);
     serv_addr.sin_addr.s_addr=0; // Слушаем все IP с указанного порта
 if(bind(ServerSocket,(sockaddr*)&serv_addr,sizeof(serv_addr))!=0){cout <<"Bind: FAIL."<<endl; return false;}else{cout <<"Bind: OK."<<endl;}
 
 
     ServerActive=true;
     ServerListen();
     return true;
}
//-----------------------------------------------------------------------------------------------------------------------------------------------
int Cheb21::ServerListen()
{
    
    Cheb21 ch;
    string str;
    if(listen(ServerSocket,0x100))
     {
    cout <<"Listen: FAIL"<<endl;
    closesocket(ServerSocket);
    WSACleanup();
    return false;
}
cout<<"Wait to connections"<<endl;
SOCKET ClientSocket;
sockaddr_in client_addr;
int client_addr_size=sizeof(client_addr);
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;
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);
 
}
return 0;
}
//-----------------------------------------------------------------------------------------------------------------------------------------------
bool Cheb21::StopServer()
{
     if(WSACleanup()){cout <<"OK"<<endl;}
}
0
Жарю без масла
867 / 749 / 225
Регистрация: 13.01.2012
Сообщений: 1,702
23.02.2012, 23:05
Цитата Сообщение от Gus Посмотреть сообщение
C++
1
2
3
      char *buff;
      ...
      while(int bytes_recv=recv(usermem.UserSocket,buff,sizeof(buff),0)...
еще проблема всплыла с buff. подумайте, куда и сколько вы считываете.

Добавлено через 10 минут
в ф-ии ServerListen(уже обсуждали же)
C++
1
2
3
4
5
6
        usermem=new User;
        strcat(usermem->IP,(char*)&client_addr.sin_addr);
        usermem->UserSocket=ClientSocket;
        usermem->indificator=1; // нужное значение ставьте сами, но сомневаюсь в нужности этого поля структкры вообще(не используется)
        cout <<"Client CONNECTED !!!"<< usermem->IP<<endl;
        CreateThread(0,0,ClientSession,usermem,0,&thID);
Добавлено через 10 минут
C++
1
2
3
4
5
6
7
8
9
struct User
{
public:
    int UserSend(char* buff, size_t n);
...
    char IP[16]; // 16!
};
int User::UserSend(char* buff, size_t n)
{ return send(UserSocket, buff, n, 0); }
в ф-ии ClientSession
C++
1
2
3
4
5
char buff[BUFSIZ]; // BUFSIZ определите сами
...
while(bytes_recv=recv(usermem->UserSocket,buff,BUFSIZ,0)...
    ...
    usermem->UserSend(buff, bytes_recv);
1
 Аватар для Pobegun'ka
0 / 0 / 1
Регистрация: 10.01.2012
Сообщений: 3
27.05.2012, 15:10
Помогите допписать программу на с++ пожалуйста,а то я не могу разобраться немного,как сделать
Мне необходимо написать динамическую структуру очередь с исключением по приоритету

Вот текст уже готовой программы
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
#include<iostream.h>
#include<conio.h>
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#include<ctype.h>
char a[10][13],b[13];//13-ctolbzov
int c[10];
struct Node{
char prior;
char *d;
Node *p;
};
Node *first(int c) ;
void add(Node **pend,char *d,int c);
char* del(Node **pbeg);
 
int main()
{clrscr();
int n,str;
cout<<"VVedite kolicestvo strok "<<endl;
cin>>n;
for(int i=0;i<n;i++)
{cout<<i+1<<". VVedite imya faila: ";
gets(a[i]);
cout<<"VVedite prioritet: ";
cin>>c[i];
cout<<endl;
}
 
Node *pbeg=first(c[0]);
Node *pend=pbeg;
for( i=1;i<n;i++)
add(&pend,a[i],c[i]);
while(pbeg)
cout<<del(&pbeg)<<endl;
getche();
return 0;
}
 
Node * first(int c)
{Node *pv=new Node;
pv->prior=c;
pv->p=0;
return pv;
}
 
void add(Node **pend,char *d,int c)
{Node *pv=new Node;
pv->prior=c;
pv->d=d;
pv->p=0;
(*pend)->p=pv;
*pend=pv;
}
 
char *del(Node **pbeg)
{
 
char *temp=(*pbeg)->d;
Node *pv=*pbeg;
*pbeg=(*pbeg)->p;
delete pv;
return temp;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
27.05.2012, 15:10
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
29
Ответ Создать тему
Новые блоги и статьи
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru