Участник
Покинул форум
Сообщений всего: 93
Дата рег-ции: Сент. 2014
Репутация: 1
|
Давненько сюда не писал, но видимо сам я не осилю, хотя раньше все работало, но сейчас я все поломал, а разбираться, опять пару десятков часов уйдет.
В обещм привет). Хочу реализовать связь между двумя пк, до этого все работало, но я переписал значительную часть кода, который не имел отношения к серверу с клиентом, тестил все на 1 пк, без клиента с сервером, но как всегда все поломал(
Помогите, если не затруднит, сам я может и разберусь, но помощи всегда буду рад.
Вот сам код
код (Отобразить)
int SendTrue=0;
char recvs[256];//массив в который принимаем
char sends[256];//массив который передаем
string gettext="0";
string otvet;
string IPC="0";
string text_edit0[1];
text_edit0[0]="1";
int logx=650,logy=150;
/*
function sendcom(int portn, string textsend) - функция отправки сообщений
*/
loop()//тут можеть быть ваш код для теста к примеру sendcom(10006, "4" );
{
sendcom(10006, "4" );
};
//flag_button0[0]=0;//обнулим
/* Если на одном компьютере указать 127.0.0.1
если одна подсеть узнать ip запустив пуск выполнить cmd /k ipconfig /all
если интернеи и выделенный ip у сервака писать его ip*/
function sendcom(int portn, string textsend) // клиент
{
int SendTrue=0;
if(portn<10006)
{
IPC="192.168.46.2";
}
else
{
IPC="192.168.158.2";
};
int n24=0;
//textout(0, 50, 50, format(n24), 2);
ff:;
n24++;
kiborlog(0,"Попытка: "+format(n24), logx, logy, 300, 250);
mu_pause1(3000);
if(opensocket(IPC, portn)==1)//откроем сокет на 10005 порту сервера (самому выбирать)
{
kiborlog(0,"Открыли сокет на "+format(portn)+"порту", logx, logy, 300, 250);
strcpy(#sends[0], textsend);//заполним массив передачи текстом с второго edit
if (sendhtml(#sends[0], size(#sends[0]))>0)//Если отправили
{
kiborlog(0,"Отправили: "+format(portn)+", "+textsend, logx, logy, 300, 250);
if (recvhtml(#recvs[0], 256)>0)
{
otvet=format(#recvs[0]);//когда примем ответ запишем ответ в edit
kiborlog(0,"Получили ответ: "+format(otvet), logx, logy, 300, 250);
//textout(96,100,200,otvet,2);
SendTrue=1;
closesocket();//Закрываем сокет
};
}
else
{
kiborlog(0,"Не удалось отправить: "+format(portn)+", "+textsend, logx, logy, 300, 250);
goto ff;
};
//if(SendTrue==1){
if(formatsn(otvet)==1)
{
goto gdfgdgf;
}
else ff;
gdfgdgf:;
otvet="0";
//textout(96,100,200,otvet,2);
return;
};
};
function mu_pause1(int p)//реализация паузы что бы не зависал на время ее скрипт
{
for (int t=gettime(); gettime()-t<p; pause(10)){}
};
// ниже сервер
enabletimer(75);//включили таймер
int flag_recv=0;// это флаг в котором будет 1 когда на сервер придет сообщение
int portt=10000+formatsn(text_edit0[0]); // назначили порт исходя из номера бота
CREATE_TIMER(75, 500)
{
enablelistenport (portt);//включили прослушку 10005 порта (самому выбирать)
recvport (#recvs[0], 256, #flag_recv);//начали слушать. в отдельном потоке
if (flag_recv==1)//если тут 1 - пришло сообщение
{
if (recvs[1]!='null' )
{
gettext=recvs[0]+recvs[1];
};
kiborlog(0,"Получили сообщение: "+format(gettext), logx, logy, 300, 250);
strcpy(#sends[0], "1" );//заполним массив передачи текстом с второго edit
sendport (#sends[0], size(#sends[0]));//отправим
recvport (#recvs[0], 256, #flag_recv); // опять слушаем
flag_recv=0;//обнулим
if (formatsn(gettext)==3)team1readymenu=0;
if (formatsn(gettext)==4)team1readymenu=1;
if (formatsn(gettext)==5)team2readymenu=0;
if (formatsn(gettext)==6)team2readymenu=1;
if (formatsn(gettext)==7)findgame1=0;
if (formatsn(gettext)==8)findgame1=1;
if (formatsn(gettext)==9)findgame2=0;
if (formatsn(gettext)==10)findgame2=1;
if (formatsn(gettext)==11)accept=0;
if (formatsn(gettext)==12)accept=1;
if (formatsn(gettext)==13)gameisready1=0;
if (formatsn(gettext)==14)gameisready1=1;
if (formatsn(gettext)==15)gameisready2=0;
if (formatsn(gettext)==16)gameisready2=1;
if (formatsn(gettext)==17) // сбросить поиск
{
kiborlog(0,"Сбросили поиск: ", logx, logy, 300, 250);
mousemove(611,423);
pause(150);
mouse(LEFT,611,423);
pause(150);
pause(5000);
if(scanpixel(764, 529, 132665, 6, 6, 6, 6, 6, 6, -1)==1)
{
mousemove(764, 529);
sleep(250);
mouse(LEFT,764, 529);
mousemove(0, 0);
};
goto global resetsearch;
};
?
if (formatsn(gettext)==18 && formatsn(text_edit0[0])==1) // Принятие игры
{
kiborlog(0,"Отправляем принятие игры", logx, logy, 300, 250);kiborlog(0,"Отправляем принятие игры", logx, logy, 300, 250);
sendcom(10002, "19" );
sendcom(10003, "19" );
sendcom(10004, "19" );
sendcom(10005, "19" );
sendcom(10007, "19" );
sendcom(10008, "19" );
sendcom(10009, "19" );
sendcom(10010, "19" );
};
/*
if (formatsn(gettext)==18 && formatsn(text_edit0[0])==6) // Принятие игры
{
sendcom(10007, "19" );
sendcom(10008, "19" );
sendcom(10009, "19" );
sendcom(10010, "19" );
};
*/
if (formatsn(gettext)==24 && formatsn(text_edit0[0])==1) // Это
{
sendcom(10002, "25" );
sendcom(10003, "25" );
sendcom(10004, "25" );
sendcom(10005, "25" );
};
if (formatsn(gettext)==24 && formatsn(text_edit0[0])==6) // и это я для теста делал
{
sendcom(10007, "25" );
sendcom(10008, "25" );
sendcom(10009, "25" );
sendcom(10010, "25" );
};
if (formatsn(gettext)==25 && formatsn(text_edit0[0])!=1 && formatsn(text_edit0[0])!=6) // это тоже часть теста
{
key("Z" );
pause(350);
key(8);
};
if (formatsn(gettext)==19 && formatsn(text_edit0[0])!=1 && formatsn(text_edit0[0])!=6) // и это
{
mousemove(363,293);
pause(150);
mouse(LEFT,363,293);
pause(450);
goto global startgamecomanda;
};
};
//messagebox(format(#recvs[0]));//запишем это сообщение в edit
//
//textout(48,100,140,gettext,2);
//if(formatsn(text_edit0[0])==1 || formatsn(text_edit0[0])==6)textout(53,100,160,"team1readymenu: "+format(team1readymenu),2);
//if(formatsn(text_edit0[0])==1 || formatsn(text_edit0[0])==6)textout(54,100,160,"team2readymenu: "+format(team2readymenu),2);
};
// team1readymenu=0; // 3-0, 4-1
// team2readymenu=0;// 5-0, 6-1
// gameisready1=0; // 13-0, 14-1
// gameisready2=0; // 15-0, 16-1
// startfind1=0;// 17-0,18-1
// startfind2=0;// 19-0,20-1
// findgame1=0; // 7-0, 8-1
// findgame2=0; // 9-0, 10-1
// accept=0; // 11-0, 12-1
startgamecomanda:;
resetsearch:;
(Добавление)
Все не так страшно как это выглядит на первый взгляд.
Моя проблема в том, что мой код не может обмениваться сообщениями между разными пк.
IP указывается через условие меньше 6 - первый пк, а все остальное это 2-й (Text_edit)
Ранее я сталкивался с проблемой, что они оба пытаются одновременно отправить сообщение (буквально синхронно), но ни у кого не получалось, однако если это было не синхронно, то все работало.
Была еще проблема, медленной отправки, когда нужно было отправить команду на 8 клиентов, изначально я разделил клиенты по разным пк, чтобы 1 клиент отправлял команды только на свой пк, сейчас сделал, так, чтобы 1 клиент отправлял и на свой пк команды и на другой, в надежде что это повысит скорость передачи сообщений.
Текста получилось многовато, но быть может это поможет мне решить мои проблемы с вашими советами, заранее спасибо. |