Здравствуйте!
Написал клиент-серверное приложение под windows XP SP3, на MSVS 6.0. Сервер стоит на windows server 2008 - работает как служба и исправно. Запускаю клиент на Vista Home Basic - приложение запускается, пара нажатий на кнопочки типа получить данные с сервера и программа закрывается. Сообщение такое: *.exe не работает Возникшая проблема привела к прекращению работы программы. Виндоус закроет эту программу, а если есть известный способ устранения проблемы, уведомит вас об этом.
Ладно, фигня.. Ставлю VS6.0. на Висту и дебажу - все отлично работает. запускаю ехе-шник мимо студии и вуаля - опять та же хрень что я написал чуть выше.
Возник вопрос: Почему под студией работает все хорошо, а когда я запускаю как приложение - оно падает? Может где что исправиьт надо? зависит ли это от сервера, потому что падает оно только тогда когда я спрашиваю что-нибудь от сервера? Может дело в функциях винсока? В общем, любые догадки, пожалуйста, потому что я уже все испробовал.
Вот код на всякуий случай, получение данных с сервера:
| Код |
pack* sendQuery(int YYYY1,int MM1,int DD1,int hh1,int mm1,int YYYY2,int MM2,int DD2,int hh2,int mm2,char* name,char* subname,int minutes) { pack A; char buf[1024]; char* str = NULL; A.Form2(YYYY1,MM1,DD1,hh1,mm1, YYYY2,MM2,DD2,hh2,mm2, name,subname, minutes); int bytesSent; bytesSent = send(m_socket,A.ToString(),A.pack_size,0); int close=0; int numeration = 0; int lenofpack=0; char ttt[10]; int first=1; int length = 0; int index =0 ; char* newstr = NULL; for(int i=0;i<1024;i++) buf[i]=0; do { bytesSent = recv(m_socket,buf,(int)1024,0); if(bytesSent>0) { index = 0; int j=0; int size = 1024; newstr = new char[size]; for(int i=0;i<size;i++) newstr[i] = buf[i]; while(0<=(index=FindSubString(newstr,size,"okay"))) { MakesubstringFromString(newstr,size,index,index + (int)strlen("okay")); //warning str is deleting size = size-(int)strlen("okay"); j++; } while(j>0) { SendMessage(hwndPB,PBM_STEPIT,0,(LPARAM)0); SendMessage(hProgressTitle,WM_SETTEXT,0,(LPARAM)""); SendMessage(hProgressTitle,WM_SETTEXT,0,(LPARAM)progressenum[numeration]); numeration++; j--; } for(int k=0;k<1024;k++) buf[k] =0; for(k=0;k<size;k++) buf[k]=newstr[k]; delete []newstr; newstr = NULL; if(first==1) { if(buf[1] == buf[3] && buf[3] == '|') { int i=0; while(buf[i+4]!='|') { ttt[i] = buf[i+4]; i++; } ttt[i]=0; lenofpack = atoi(ttt); str = new char[lenofpack+10+strlen(ttt)]; first=0; } } if(lenofpack>0) { int i=0; while(i<1024) { str[length+i] = buf[i]; if(buf[i+1]==0) { int j=i+1; while(j<1024) { if(buf[j]!=0) break; j++; } if(j==1024) { if(str[length+i]==53 && str[length+i-1]==53 && str[length+i-2]==50 && str[length+i-3]==124) close =1; i++; break; } } i++; } str[length+i] = 0; length += i; } for(k=0;k<1024;k++) buf[k] =0; if(newstr) {delete []newstr; newstr = NULL;} } else close = 1; //MessageBox(hWnd,"something come end","",MB_OK); }while(close<1); if(newstr) { delete []newstr; newstr = NULL; } pack *ret = new pack(); if(!str) { //delete []str; //str = NULL; return (pack*)0; } if(ret->FillByString(str)) { if(str) { delete []str; str = NULL; } return ret; } if(str) {delete []str;str = NULL;} return (pack*)0; }
|
|