Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.61/18: Рейтинг темы: голосов - 18, средняя оценка - 4.61
0 / 0 / 0
Регистрация: 28.09.2012
Сообщений: 12

Поочередная передача массива от двух клиентов на сервер

18.01.2013, 13:15. Показов 3882. Ответов 22
Метки нет (Все метки)

Заранее извиняюсь похожие темы видел, но все равно решил создать отдельный топик. Если будет мешать можете удалить\пернести в другое место.
Задача: отправить от одного клинта на сервер массив, затем спустя например 4 секунды от другого клиента отправить такой же массив на этот же сервер.

Реализация: (на данный момент у меня связываются клиент\сервер и клиент передает серверу массив.) Как быть со вторым клиентом? Как реализовать передачу спустя 4 секунды чтобы данные от первого клиента сохранялись на сервере.)


Сервер:
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
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
 
#include "srv.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::ServerSocket1ClientConnect(TObject *Sender,
      TCustomWinSocket *Socket)
{
  StatusBar1->SimpleText = (DateTimeToStr(Now())+ " Клиент подключился: " + Socket->RemoteAddress);
 
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::ServerSocket1ClientDisconnect(TObject *Sender,
      TCustomWinSocket *Socket)
{
StatusBar1->SimpleText = (DateTimeToStr(Now())+ " Клиент отключился: "+ Socket->RemoteAddress);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ServerSocket1ClientRead(TObject *Sender,
      TCustomWinSocket *Socket)
{
 Memo1->Lines->Clear();
 Memo1->Lines->Add(Socket->RemoteAddress+" ->"+ Socket->ReceiveText());
 Socket->SendText("Массив передан");
 int pMass[1024];
 Socket->ReceiveBuf(pMass,sizeof(pMass));
 
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormActivate(TObject *Sender)
{
ServerSocket1->Port=5555;
ServerSocket1->Active=true;        
}
//---------------------------------------------------------------------------
Клиент:
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
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "clnt.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormActivate(TObject *Sender)
{
 ClientSocket1->Address="127.0.0.1";
 ClientSocket1->Port=5555;
 ClientSocket1->Active=true;
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::ClientSocket1Error(TObject *Sender,
      TCustomWinSocket *Socket, TErrorEvent ErrorEvent, int &ErrorCode)
{
 switch(ErrorEvent)
 {
 case eeConnect:
 {
 ShowMessage("Ошибка подключения. Проверьте работу сервера");
 break;
 }
 case eeAccept:
 {
 ShowMessage("Ошибка доступа");
 break;
 }
 }
 ErrorCode = 0;
}
//---------------------------------------------------------------------------
 
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
 ClientSocket1->Active = true;
 int pMass[1024];
 for(int i=0;i<1024;i++)
 pMass[i]=0x33333333;
 ClientSocket1->Socket->SendBuf(pMass,sizeof(pMass));
}
 
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Button2Click(TObject *Sender)
{
ClientSocket1->Active=false;
}
//---------------------------------------------------------------------------
 
 
void __fastcall TForm1::ClientSocket1Connect(TObject *Sender,
      TCustomWinSocket *Socket)
{
 StatusBar1->SimpleText=(DateTimeToStr(Now())+" Подключение к серверу установлено");
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::ClientSocket1Disconnect(TObject *Sender,
      TCustomWinSocket *Socket)
{
 StatusBar1->SimpleText=(DateTimeToStr(Now())+" Соединение с сервером потеряно");
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::ClientSocket1Read(TObject *Sender,
      TCustomWinSocket *Socket)
{
   Edit1->Text=Socket->ReceiveText();     
}
//---------------------------------------------------------------------------
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
18.01.2013, 13:15
Ответы с готовыми решениями:

Соединение двух клиентов используя сервер
Допустим у нас имеется сервер(белый ip) и два клиента(серый ip). Клиенты гибридные, могут слушать какой-либо порт. По очереди эти два...

Как сделать так чтобы сервер мог принимать данные сразу от двух клиентов?
вот у меня есть клиент-серверное приложение сервер #include &lt;stdio.h&gt; #include &lt;windows.h&gt; #include &lt;winsock.h&gt; ...

Поочередная выборка из двух узлов
Всем привет. Ребят подскажите как можно поочередно выбрать элементы двух узлов. Надо из этого: &lt;QueryResults&gt; &lt;Columns&gt; ...

22
Модератор
 Аватар для vxg
3410 / 2182 / 354
Регистрация: 13.01.2012
Сообщений: 8,468
13.03.2013, 12:44
Цитата Сообщение от hannkohsel Посмотреть сообщение
IntToStr(sh)
что это?
Цитата Сообщение от hannkohsel Посмотреть сообщение
вот тут как правильно обратится к определенному порту?
я вас не понимаю
0
0 / 0 / 0
Регистрация: 28.09.2012
Сообщений: 12
13.03.2013, 13:22  [ТС]
что это?
int sh=Socket->SocketHandle; Это я пытался по хендлу определять что какой клиент будет передовать. Ну например первый клиент имеет хендл х, значит он передает текст второй - y и передает массив. Но потом я понял что хендл закрыт для прямого доступа и нельзя клиенту назначить его в ручную.


я вас не понимаю
Смотрите, клиент подключилсяи я запомнил его RemotePort. Затем я в условии должен указать номер подключения клиента и его уникальный RemotePort, чтобы из этих условий было понятно что должен передаваться массив. Вот я и спрашиваю как это сделать.
0
Модератор
 Аватар для vxg
3410 / 2182 / 354
Регистрация: 13.01.2012
Сообщений: 8,468
13.03.2013, 15:03
и как вы догадаетесь что именно этот клиент должен слать массив? никак. процедура такая:
-подключаются клиенты
-если клиенты имеют разный адрес, то его достаточно для определения роли клиента
-если клиенты имеют одинаковый адрес (как вариант - они сидят за прокси), то для различия клиентов может использоваться порт. однако, мы не можем контролировать номер порта назначаемого клиенту. поэтому...
-после соединения клиенты шлют на сервер некую информацию идентифицирующую клиента. например, строку "я Вася" и "я Петя". сервер запоминает, что Вася сидит на адрес_1/порт_1, а Петя на адрес_2/порт_2. вот и все
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
13.03.2013, 15:03

Поочередная загрузка двух динамических массивов
Всем доброго дня. Такая задача: в программе существуют 2 динамических массива. Данные в них загружаются либо с клавиатуры, либо из...

Поочередная смена массива
Как менять цифры в переменной при каждом ее обходе скриптом? Вот код Slot.prototype.finalPos = function(elem) { var el = this.el, ...

Передача массива объектов на сервер
Не могу передать массив на сервер Client ..... var item = { kod: kod, sd: sd, ...

Клиент-сервер. Передача массива и числа.
Клиент передает массив и число А, сервер умножает все элементы массива на число А помогите пожалуйста написать программу

Передача json массива POST методом на сервер
Есть сервис, на другом домене (не мой сайт), там по специально выданному url, можно отправлять массив json и получать ответ, произошла...


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

Или воспользуйтесь поиском по форуму:
23
Ответ Создать тему
Новые блоги и статьи
Контроль уникальности строк в табличной части документа
Maks 18.06.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ПланированиеСпецтехники" с табличной частью "НаличиеОборудования", разработанного в КА2. Задача: контроль уникальности строк в. . .
Клиент
Uhbif79 18.06.2026
Здесь простой клиент для работы с сервером.
Сервер
Uhbif79 18.06.2026
Выкладываю простейший сервер.
Дефенестрация
kumehtar 18.06.2026
Узнал интересное слово. Дефенестрация. Это когда ты выбрасываешь кого-либо или что-либо из окна. Возьму на вооружение)))
Дихотомия добра и зла
kumehtar 18.06.2026
Как Дзен-буддисты говорят о добре и зле: не нужно воевать против зла, нужно воевать против невежества. Тогда добро станет ествественным, и поэтому вечным. Но дело в том, что невежество всё время. . .
Своя Интернет-Компания
iceja 18.06.2026
Я программист с экономическим образованием, пишу свой проект, это SaaS для бизнесов. Мне нужен co-founder с высшим экономическим образованием, и/ или инвестор. Сейчас проект в интенсивной разработке,. . .
24 Мат модель здравосохранения: функциональные требования к строительству пищеблока
anaschu 18.06.2026
СРесурсами1: финансовый SD-контур, калькулятор функциональных требований пищеблока Сегодня разделили затраты в агенте Экономика по образцу модели НАСОСЫ, добавили расчёт ROI и построили первый. . .
23. что сделано за последнее время.
anaschu 17.06.2026
• Эталон: Клиника НИИ питания РАМН, Москва — централизованный пищеблок, 225 коек, 180 пациентов • Git: репозиторий med2, ветка абсентеизм. Рабочий файл: СРесурсами1_v4. alp • Смежный проект:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru