Автоматизация и боты

 Помощь      Поиск      Пользователи
Сайт Кибор     Программируемый кликер Кибор     Видео обучение     Заказать бот

 Страниц (2): [1] 2 »   

> Описание: Создание сервера. Обмен данными между программами Кибор и EXE по схеме Клиент - Сервер - Клиент
Kibor
Отправлено: 31 Марта, 2015 - 00:39:54
Post Id



Администратор
Эксперт


Покинул форум
Сообщений всего: 8218
Дата рег-ции: Март 2013  
Откуда: Одесса
Репутация: 357




Дополнительные функции обмена данными позволяют настраивать соединение между программами Кибор или собранными EXE по схеме клиент - сервер или клиент - сервер - клиент.

Возможно соединение программ на одном компьютере, в одной посети и при наличие выделенного ip у машины на которой стоит серверная программа через интернет без промежуточного сервера.

если необходимо связаться с программой в сети интернет и нет выделенного IP необходимо использовать эти функции Обмен данными, контроль и управление другой программой по сети интернет.

Для создания сервера использовать функции

enablelistenport - включить прослушку порта
recvport - начали слушать. в отдельном потоке.
sendport - при получение сообщения в функции recvport можно ответить этой функцией
disablelistenport - отключить прослушку

синтаксис

 Цитата:
enablelistenport (10005);//включили прослушку 10005 порта (самому выбирать порт. должен совпадать с клиентским)

вернет больше 1 при удаче.

 Цитата:
char recvs[256];//массив в который принимаем
int flag_recv=0;// это флаг в котором будет 1 когда на сервер придет сообщение.
recvport (#recvs[0], 256, #flag_recv);//начали слушать. в отдельном потоке

вернет более 1 при удаче

 Цитата:
char sends[256];//массив который передаем
sendport (#sends[0], 256);//ответ клиенту. только если есть сообщение использовать.

вернет более 1 при удаче

 Цитата:
disablelistenport(); // при необходимости отключаем прослушку


узнать ip подсети можно набрав на машине сервера в пуск - выполнить - cmd /k ipconfig /all
ip надо указать в клиенте.

Нажмите для увеличения


пример программ клиент сервер
не забываем разрешать в брандмауэре
сервер
 Цитата:
///////диалог
int pos_size_edit0[2][4];
string text_edit0[2];

int pos_size_static0[2][4];
string text_static0[2];

pos_size_edit0[0][0]=110; pos_size_edit0[0][1]=10; pos_size_edit0[0][2]=218; pos_size_edit0[0][3]=20;
pos_size_edit0[1][0]=177; pos_size_edit0[1][1]=52; pos_size_edit0[1][2]=152; pos_size_edit0[1][3]=20;
text_edit0[0]=""; text_edit0[1]="О сервера клиенту мегаса";

pos_size_static0[0][0]=16; pos_size_static0[0][1]=14; pos_size_static0[0][2]=80; pos_size_static0[0][3]=20;
pos_size_static0[1][0]=17; pos_size_static0[1][1]=55; pos_size_static0[1][2]=150; pos_size_static0[1][3]=20;
text_static0[0]="Сервер принял"; text_static0[1]="При приеме ответит клиенту";

createdialog(0, EDIT, #pos_size_edit0[0][0], #text_edit0[0] |
STATIC, #pos_size_static0[0][0], #text_static0[0]);
showdialog(0, "Сервер", 150, 200, 347, 117, 1, 1);

////////сам сервер

char recvs[256];//массив в который принимаем
char sends[256];//массив который передаем
int flag_recv=0;// это флаг в котором будет 1 когда на сервер придет сообщение

enablelistenport (10005);//включили прослушку 10005 порта (самому выбирать)
recvport (#recvs[0], 256, #flag_recv);//начали слушать. в отдельном потоке

enabletimer(0);//включили таймер

loop()//цикл бота
{
beep(2000, 70);
mu_pause (1000);
}

function mu_pause(int p)//реализация паузы что бы не зависал на время ее скрипт
{
for (int t=gettime(); gettime()-t<p; sleep(10)){}
}

CREATE_TIMER(0, 50)
{
if (flag_recv==1)//если тут 1 - пришло сообщение
{
flag_recv=0;//обнулим
text_edit0[0]=format(#recvs[0]);//запишем это сообщение в edit
strcpy(#sends[0], text_edit0[1]);//заполним массив передачи текстом с второго edit
sendport (#sends[0], size(#sends[0]));//отправим
recvport (#recvs[0], 256, #flag_recv); // опять слушаем

}
}




клиент. о клиенте подробнее Отправки HTML запросов. Работа в интернете...
 Цитата:
int pos_size_edit0[2][4];
string text_edit0[2];
int pos_size_static0[2][4];
string text_static0[2];
int pos_size_button0[1][4];
string text_button0[1];
int flag_button0[1];

pos_size_button0[0][0]=16; pos_size_button0[0][1]=91; pos_size_button0[0][2]=313; pos_size_button0[0][3]=20;
text_button0[0]="Послать на сервер";

pos_size_edit0[0][0]=115; pos_size_edit0[0][1]=10; pos_size_edit0[0][2]=213; pos_size_edit0[0][3]=20;
pos_size_edit0[1][0]=157; pos_size_edit0[1][1]=52; pos_size_edit0[1][2]=172; pos_size_edit0[1][3]=20;
text_edit0[0]=""; text_edit0[1]="От клиента серверу пошлем";

pos_size_static0[0][0]=16; pos_size_static0[0][1]=14; pos_size_static0[0][2]=95; pos_size_static0[0][3]=20;
pos_size_static0[1][0]=17; pos_size_static0[1][1]=55; pos_size_static0[1][2]=110; pos_size_static0[1][3]=20;
text_static0[0]="Получили в ответ"; text_static0[1]="Пошлем серверу";

createdialog(0, BUTTON, #pos_size_button0[0][0], #text_button0[0], #flag_button0[0] |
EDIT, #pos_size_edit0[0][0], #text_edit0[0] |
STATIC, #pos_size_static0[0][0], #text_static0[0]);

showdialog(0, "Клиент", 350, 200, 347, 152, 1, 1);




char recvs[256];//массив в который принимаем
char sends[256];//массив который передаем

enabletimer(0);//включили таймер

int n=0;
loop()//цикл бота
{
textout(0, 50, 50, format(n), 0);
n++;
mu_pause (500);
}

function mu_pause(int p)//реализация паузы что бы не зависал на время ее скрипт
{
for (int t=gettime(); gettime()-t<p; sleep(10)){}
}

CREATE_TIMER(0, 50)
{
if (flag_button0[0]>0)//если нажата кнопка
{
flag_button0[0]=0;//обнулим
/* Если на одном компьютере указать 127.0.0.1
если одна подсеть узнать ip запустив пуск выполнить cmd /k ipconfig /all
если интернеи и выделенный ip у сервака писать его ip*/
if (opensocket ("127.0.0.1", 10005)==1)//откроем сокет на 10005 порту сервера (самому выбирать)
{
strcpy(#sends[0], text_edit0[1]);//заполним массив передачи текстом с второго edit
if (sendhtml(#sends[0], size(#sends[0]))>0)//Если отправили
{
if (recvhtml(#recvs[0], 256)>0) text_edit0[0]=format(#recvs[0]);//когда примем ответ запишем ответ в edit
}
closesocket ();//Закрываем сокет
}
}
}


 
 Top
Flash
Отправлено: 28 Ноября, 2017 - 15:51:37
Post Id



Пользователь
Участник


Покинул форум
Сообщений всего: 57
Дата рег-ции: Нояб. 2015  
Откуда: Лангепас
Репутация: 0




Здравствуйте ! а можно вычислить откуда пришло сообщение . то есть с какого ip ? например функция recvport принимает а sendport отправляет , вот и хотелось бы узнать куда на какой ip отправляется.

(Отредактировано автором: 28 Ноября, 2017 - 15:52:18)

 
 Top
Kibor
Отправлено: 28 Ноября, 2017 - 17:33:02
Post Id



Администратор
Эксперт


Покинул форум
Сообщений всего: 8218
Дата рег-ции: Март 2013  
Откуда: Одесса
Репутация: 357




Как вариант пусть в сообщение на сервер клиент отправляет свой ip, который можно узнать с помощью какого нибудь сервиса, послав на него запрос с помощью sendhtml и распарсить с ответа ip
 
 Top
Flash
Отправлено: 07 Декабря, 2017 - 02:42:35
Post Id



Пользователь
Участник


Покинул форум
Сообщений всего: 57
Дата рег-ции: Нояб. 2015  
Откуда: Лангепас
Репутация: 0




Спасибо! буду иметь ввиду
 
 Top
Flash
Отправлено: 27 Февраля, 2018 - 16:14:42
Post Id



Пользователь
Участник


Покинул форум
Сообщений всего: 57
Дата рег-ции: Нояб. 2015  
Откуда: Лангепас
Репутация: 0




Всем привет ! есть проблема с сервером может кто столкнулся с этим как решить? Суть, за основу возьму 2 примера с 1-й страницы (сервер, клиент), запускаю сервер, в клиенте делаю что бы постоянно отправлял запрос на сервер то есть (flag_button0[0]=0;//обнулим) удаляю что бы было в цикле и делаю паузу (1000-10000мс неважно), делаю 2 копии клиента в .exe, запускаю клиент пошёл процесс обмена, рано или позно клиент подвисает в ожидание ответа так как (opensocket) открыт и он ждёт ответа от сервера но сервер молчит, запускаю 2-ю копию клиента тоже сразу подвисает, в сервере flag_recv==1 после каждой отправки я проверял, а количество раз обмениваются сервер клиент от 300 - до нескольких тысяч, по разному но всегда клиент виснет, проверял через cmd команду на проверку стабильности интернета всё норм потеря пакетов 0. может кто что посоветует, мне кажется что что то с сервером надо делать. может через определённое время делать disablelistenport(); чтобы клиент отвис, типо перезагрузка ).
 
 Top
Kibor
Отправлено: 28 Февраля, 2018 - 12:46:08
Post Id



Администратор
Эксперт


Покинул форум
Сообщений всего: 8218
Дата рег-ции: Март 2013  
Откуда: Одесса
Репутация: 357




Flash , код выложите.
 
 Top
Flash
Отправлено: 01 Марта, 2018 - 20:31:18
Post Id



Пользователь
Участник


Покинул форум
Сообщений всего: 57
Дата рег-ции: Нояб. 2015  
Откуда: Лангепас
Репутация: 0




 Kibor пишет:
Flash , код выложите.

Здравствуйте! ну вот собственно код, на примерах выше. щас проверил подвис на передаче 1100, если запустить ещё копию клиент то тоже сразу подвисает, если выключить сервер клиент отвиснет.


CODE:
///////ñåðâåð
int pos_size_static0[2][4];
string text_static0[2];
int pos_size_button0[1][4];
string text_button0[1];
int flag_button0[1];

pos_size_button0[0][0]=10; pos_size_button0[0][1]=65; pos_size_button0[0][2]=120; pos_size_button0[0][3]=20;
text_button0[0]="ñòàðò";


pos_size_static0[0][0]=10; pos_size_static0[0][1]=15; pos_size_static0[0][2]=120; pos_size_static0[0][3]=20;
pos_size_static0[1][0]=10; pos_size_static0[1][1]=40; pos_size_static0[1][2]=120; pos_size_static0[1][3]=20;
text_static0[0]="êîëè÷åñòâî çàïðîñîâ"; text_static0[1]="";

createdialog(0, BUTTON, #pos_size_button0[0][0], #text_button0[0], #flag_button0[0] |
STATIC, #pos_size_static0[0][0], #text_static0[0]);

showdialog(0, "ñåðâåð", 350, 200, 147, 125, 1, 1);


char recvs[256];
char sends[256];
int flag_recv=0;


loop()
{
if(flag_button0[0]>0)goto 1;
sleep(30);
}

1:;
flag_button0[0]=0;



enablelistenport (10005);
recvport (#recvs[0], 256, #flag_recv);
enabletimer(0);



loop()
{
//beep(2000, 70);
mu_pause (1000);
}

function mu_pause(int p)
{
for (int t=gettime(); gettime()-t<p; sleep(10)){}
}

CREATE_TIMER(0, 50)
{
if (flag_recv==1)
{
flag_recv=0;
text_static0[1]=format(#recvs[0]);
strcpy(#sends[0], text_static0[1]);
sendport (#sends[0], size(#sends[0]));
recvport (#recvs[0], 256, #flag_recv);

}
}






CODE:
///////êëèåíò
int pos_size_static0[2][4];
string text_static0[2];
int pos_size_button0[1][4];
string text_button0[1];
int flag_button0[1];

pos_size_button0[0][0]=10; pos_size_button0[0][1]=65; pos_size_button0[0][2]=120; pos_size_button0[0][3]=20;
text_button0[0]="ñòàðò";


pos_size_static0[0][0]=10; pos_size_static0[0][1]=15; pos_size_static0[0][2]=120; pos_size_static0[0][3]=20;
pos_size_static0[1][0]=10; pos_size_static0[1][1]=40; pos_size_static0[1][2]=120; pos_size_static0[1][3]=20;
text_static0[0]="êîëè÷åñòâî îòâåòîâ"; text_static0[1]="";

createdialog(0, BUTTON, #pos_size_button0[0][0], #text_button0[0], #flag_button0[0] |
STATIC, #pos_size_static0[0][0], #text_static0[0]);

showdialog(0, "êëèåíò", 350, 200, 147, 125, 1, 1);




char recvs[256];
char sends[256];
int k=0; ///// Ñ÷¸ò÷èê
string K;

enabletimer(0);

int n=0;
loop()
{
mu_pause (500);
}




function mu_pause(int p)
{
for (int t=gettime(); gettime()-t<p; sleep(10)){}
}



CREATE_TIMER(0, 50)
{
if (flag_button0[0]>0)
{
//flag_button0[0]=0;


if (opensocket ("127.0.0.1", 10005)==1)
{
k++;
K=format(k);

strcpy(#sends[0], K);
if (sendhtml(#sends[0], size(#sends[0]))>0)
{
if (recvhtml(#recvs[0], 256)>0) text_static0[1]=format(#recvs[0]);
}
closesocket ();
}
}
pause(1000);
}
 
 Top
Kibor
Отправлено: 01 Марта, 2018 - 21:07:05
Post Id



Администратор
Эксперт


Покинул форум
Сообщений всего: 8218
Дата рег-ции: Март 2013  
Откуда: Одесса
Репутация: 357




сервер
CODE:
///////диалог
int pos_size_edit0[2][4];
string text_edit0[2];

int pos_size_static0[2][4];
string text_static0[2];

pos_size_edit0[0][0]=110; pos_size_edit0[0][1]=10; pos_size_edit0[0][2]=218; pos_size_edit0[0][3]=20;
pos_size_edit0[1][0]=177; pos_size_edit0[1][1]=52; pos_size_edit0[1][2]=152; pos_size_edit0[1][3]=20;
text_edit0[0]=""; text_edit0[1]="О сервера клиенту мегаса";

pos_size_static0[0][0]=16; pos_size_static0[0][1]=14; pos_size_static0[0][2]=80; pos_size_static0[0][3]=20;
pos_size_static0[1][0]=17; pos_size_static0[1][1]=55; pos_size_static0[1][2]=150; pos_size_static0[1][3]=20;
text_static0[0]="Сервер принял"; text_static0[1]="При приеме ответит клиенту";

createdialog(0, EDIT, #pos_size_edit0[0][0], #text_edit0[0] |
STATIC, #pos_size_static0[0][0], #text_static0[0]);
showdialog(0, "Сервер", 150, 200, 347, 117, 1, 1);

////////сам сервер

char recvs[256];//массив в который принимаем
char sends[256];//массив который передаем
int flag_recv=0;// это флаг в котором будет 1 когда на сервер придет сообщение

enablelistenport (10005);//включили прослушку 10005 порта (самому выбирать)
recvport (#recvs[0], 256, #flag_recv);//начали слушать. в отдельном потоке

enabletimer(0);//включили таймер

loop()//цикл бота
{
beep(2000, 70);
mu_pause (1000);
}

function mu_pause(int p)//реализация паузы что бы не зависал на время ее скрипт
{
for (int t=gettime(); gettime()-t<p; sleep(10)){}
}

CREATE_TIMER(0, 50)
{
if (flag_recv==1)//если тут 1 - пришло сообщение
{
flag_recv=0;//обнулим
text_edit0[0]=format(#recvs[0]);//запишем это сообщение в edit
strcpy(#sends[0], text_edit0[1]);//заполним массив передачи текстом с второго edit
sendport (#sends[0], size(#sends[0]));//отправим
recvport (#recvs[0], 256, #flag_recv); // опять слушаем

}
}



клиент
CODE:
int pos_size_edit0[1][4];
string text_edit0[1];
int pos_size_static0[2][4];
string text_static0[2];
int pos_size_button0[1][4];
string text_button0[1];
int flag_button0[1];

pos_size_button0[0][0]=16; pos_size_button0[0][1]=91; pos_size_button0[0][2]=313; pos_size_button0[0][3]=20;
text_button0[0]="Послать на сервер значение переменной k";

pos_size_edit0[0][0]=115; pos_size_edit0[0][1]=10; pos_size_edit0[0][2]=213; pos_size_edit0[0][3]=20;
text_edit0[0]="";

pos_size_static0[0][0]=16; pos_size_static0[0][1]=14; pos_size_static0[0][2]=95; pos_size_static0[0][3]=20;
pos_size_static0[1][0]=17; pos_size_static0[1][1]=55; pos_size_static0[1][2]=170; pos_size_static0[1][3]=20;
text_static0[0]="Получили в ответ"; text_static0[1]="Пошлем серверу переменную k";

createdialog(0, BUTTON, #pos_size_button0[0][0], #text_button0[0], #flag_button0[0] |
EDIT, #pos_size_edit0[0][0], #text_edit0[0] |
STATIC, #pos_size_static0[0][0], #text_static0[0]);

showdialog(0, "Клиент", 350, 200, 347, 152, 1, 1);


int k=0;

char recvs[256];//массив в который принимаем
char sends[256];//массив который передаем

enabletimer(0);//включили таймер

int n=0;
loop()//цикл бота
{
textout(0, 50, 50, format(n), 0);
n++;
mu_pause (500);
}

function mu_pause(int p)//реализация паузы что бы не зависал на время ее скрипт
{
for (int t=gettime(); gettime()-t<p; sleep(10)){}
}

CREATE_TIMER(0, 50)
{
//if (flag_button0[0]>0)//ЗАКОМЕНТИРОВАЛИ
{
flag_button0[0]=0;//обнулим
/* Если на одном компьютере указать 127.0.0.1
если одна подсеть узнать ip запустив пуск выполнить cmd /k ipconfig /all
если интернеи и выделенный ip у сервака писать его ip*/
if (opensocket ("127.0.0.1", 10005)==1)//откроем сокет на 10005 порту сервера (самому выбирать)
{
k++;
if (k>9999999)k=0;
strcpy(#sends[0], format(k));//заполним массив передачи текстом с второго edit
if (sendhtml(#sends[0], size(#sends[0]))>0)//Если отправили
{
if (recvhtml(#recvs[0], 256)>0) text_edit0[0]=format(#recvs[0]);//когда примем ответ запишем ответ в edit
}
closesocket ();//Закрываем сокет
}
}
}


комментировал кнопку.
//if (flag_button0[0]>0)//ЗАКОМЕНТИРОВАЛИ
в цикле шлется переменная k
все нормально.
можно поменять при работе текст что сервер возвратит.
 
 Top
Flash
Отправлено: 27 Ноября, 2018 - 21:54:43
Post Id



Пользователь
Участник


Покинул форум
Сообщений всего: 57
Дата рег-ции: Нояб. 2015  
Откуда: Лангепас
Репутация: 0




Здравствуйте! А можно ли через sendport отправлять что то помимо текстового сообщения? Например изображения архив или документы.
 
 Top
Kibor
Отправлено: 28 Ноября, 2018 - 09:30:37
Post Id



Администратор
Эксперт


Покинул форум
Сообщений всего: 8218
Дата рег-ции: Март 2013  
Откуда: Одесса
Репутация: 357




Передаются байты, а не текст. Все файлы это байты.
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0)
« О программе Кибор »


Все гости форума могут просматривать этот раздел.
Только администраторы и модераторы могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 




Powered by