опубликован 10-02-2002 19:50 MSK
Нет таких нет. По идее если бы они были, то в Debug версии они бы проявились (мне так кажется). Но в ней все работает просто прекрасно. HELP
Вот тот код у которого крупные проблемы в Release версии.
Плиз подскажите что я тут не заметил. Я конечно понимаю что вам не охота копаться в такой куче кода. Поэтому пойму если ответов не будет. Но тем не менее.
//------------------------------------------//
// Simple Server programm //
// coded by lukash (delitant) //
// compiler Visual C++ 6.0 SP3 //
// mail to: lukash@ukr.net //
//------------------------------------------//
#include <windows.h>
#include <stdio.h>
#define WM_CLIENT WM_USER+1
#define SHUTDOWNALL 100
#define SHUTDOWSEL 101
#define STARTALL 102
#define STARTSEL 103
SOCKET ListenSock, sock;
sockaddr_in local, addr;
HWND hwnd, hList, hShutA, hShutS, hCombo, hStartA, hStartS;
hostent *h;
char *Message = new char[256];
char *Title = new char[256];
char ip[4];
bool InitServer();
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{
WSADATA ws;
if( WSAStartup(0x0202,&ws) )
{
sprintf(Message,"Cant init Winsock2.2. %d - error", WSAGetLastError());
MessageBox(NULL,Message,"Error",NULL);
return 0;
}
memset(&sock,0,1000);
ListenSock = INVALID_SOCKET;
WNDCLASS wc;
memset(&wc,0,sizeof(WNDCLASS));
wc.style = CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc = (WNDPROC) WndProc;
wc.hInstance = hInstance;
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wc.lpszClassName = "CServer";
wc.lpszMenuName = NULL;
wc.hCursor = LoadCursor(NULL,IDC_ARROW);
wc.hIcon = LoadIcon(NULL,IDI_APPLICATION);
if( !RegisterClass(&wc))
{
MessageBox(NULL,"Cant create window.",NULL,NULL);
return 0;
}
hwnd = CreateWindow("CServer","Server",
WS_SYSMENU | WS_CAPTION | WS_MINIMIZE | WS_VISIBLE | WS_CLIPSIBLINGS | WS_OVERLAPPED | WS_MINIMIZEBOX,
200,200,335,160,NULL,NULL,hInstance,NULL);
ShowWindow(hwnd,SW_SHOW);
if( !InitServer() ) return 0;
MSG msg;
while(GetMessage(&msg,NULL,NULL,NULL))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
return 0;
}
bool InitServer()
{
if( gethostname(Message,124) == SOCKET_ERROR )
{
sprintf(Message,"gethostname error - %d", WSAGetLastError());
MessageBox(hwnd,Message,"Error",NULL);
}
else
{
h=gethostbyname(Message);
sprintf(Title,"Server - %s : ",Message);
memcpy(&ip,h->h_addr,4);
sprintf(Message,"%d.%d.%d.%d",ip[0],ip[1],ip[2],ip[3]);
strncat(Title,Message,16);
SetWindowText(hwnd, Title);
}
ListenSock = socket(AF_INET,SOCK_STREAM,0);
if( ListenSock == INVALID_SOCKET )
{
sprintf(Message,"Socket error - %d", WSAGetLastError());
MessageBox(hwnd,Message,"Error",NULL);
return 0;
}
local.sin_addr.s_addr = INADDR_ANY;
local.sin_family = AF_INET;
local.sin_port = htons(55000);
if(bind(ListenSock,(sockaddr*)&local,sizeof(local)) == SOCKET_ERROR)
{
sprintf(Message,"Port 55000 is uzed");
MessageBox(hwnd,Message,"Error",NULL);
return 0;
}
if(listen(ListenSock,5) == SOCKET_ERROR)
{
sprintf(Message,"Listen error - %d", WSAGetLastError());
MessageBox(hwnd,Message,"Error",NULL);
return 0;
}
if(WSAAsyncSelect(ListenSock,hwnd,WM_CLIENT,FD_ACCEPT|FD_READ|FD_CLOSE) == SOCKET_ERROR )
{
sprintf(Message,"WSAAsyncSelect error - %d", WSAGetLastError());
MessageBox(hwnd,Message,"Error",NULL);
return 0;
}
return 1;
}
LRESULT CALLBACK WndProc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam)
{
int i,b,j;
i=b=j=0;
char *k = new char[1];
switch(msg)
{
case WM_CREATE:
//---------------------------------------------
hList = CreateWindowEx(WS_EX_CLIENTEDGE,"LISTBOX","listbox",
WS_VISIBLE|WS_CHILD|LBS_HASSTRINGS|WS_VSCROLL|WS_HSCROLL,
10,10,150,130,hwnd,(HMENU)NULL,(HINSTANCE)GetWindowLong(hwnd,GWL_HINSTANCE),NULL);
//--------------------- SHUTDOWNALL -----------
hShutA = CreateWindowEx(WS_EX_CLIENTEDGE,"BUTTON"," Shutdown All",
WS_VISIBLE|WS_CHILD,
170,10,150,20,hwnd,(HMENU)SHUTDOWNALL,(HINSTANCE)GetWindowLong(hwnd,GWL_HINSTANCE),NULL);
//--------------------- SHUTDOWSEL ------------
hShutS= CreateWindowEx(WS_EX_CLIENTEDGE,"BUTTON","Shutdown Sellect",
WS_VISIBLE|WS_CHILD,
170,35,150,20,hwnd,(HMENU)SHUTDOWSEL,(HINSTANCE)GetWindowLong(hwnd,GWL_HINSTANCE),NULL);
//---------------------------------------------
hCombo = CreateWindowEx(WS_EX_CLIENTEDGE,"COMBOBOX","ComboBox",
WS_VISIBLE|WS_CHILD|CBS_AUTOHSCROLL|CBS_HASSTRINGS|CBS_DROPDOWN,
170,60,150,20,hwnd,(HMENU)NULL,(HINSTANCE)GetWindowLong(hwnd,GWL_HINSTANCE),NULL);
//--------------------- STARTALL --------------
hStartA= CreateWindowEx(WS_EX_CLIENTEDGE,"BUTTON","Start All",
WS_VISIBLE|WS_CHILD,
170,85,150,20,hwnd,(HMENU)STARTALL,(HINSTANCE)GetWindowLong(hwnd,GWL_HINSTANCE),NULL);
//--------------------- STARTSEL --------------
hStartS= CreateWindowEx(WS_EX_CLIENTEDGE,"BUTTON","Start Sellect",
WS_VISIBLE|WS_CHILD,
170,110,150,20,hwnd,(HMENU)STARTSEL,(HINSTANCE)GetWindowLong(hwnd,GWL_HINSTANCE),NULL);
//---------------------------------------------
SendMessage(hCombo,CB_ADDSTRING,0,(LPARAM)"calc");
SendMessage(hCombo,CB_ADDSTRING,0,(LPARAM)"freecell");
break;
case WM_DESTROY:
shutdown(ListenSock,1);
closesocket(ListenSock);
WSACleanup();
delete[]Message;
delete[]Title;
delete[]h;
PostQuitMessage(0);
break;
case WM_COMMAND:
switch(wParam)
{
case SHUTDOWNALL:
while( SendMessage(hList,LB_GETCOUNT,0,0) != 0)
{
b = SendMessage(hList,LB_GETTEXT,(WPARAM)0,(LPARAM)Message);
Message[b]='\0';
sock = atoi(Message);
send(sock,"Q",1,0);
shutdown(sock,1);
closesocket(sock);
SendMessage(hList, LB_DELETESTRING, 0, 0);
}
break;
case SHUTDOWSEL:
i = SendMessage(hList,LB_GETCURSEL,0,0);
if( i != LB_ERR)
{
b = SendMessage(hList,LB_GETTEXT,(WPARAM)i,(LPARAM)Message);
Message[b]='\0';
sock = atoi(Message);
send(sock,"Q",1,0);
shutdown(sock,1);
closesocket(sock);
SendMessage(hList, LB_DELETESTRING, i, 0);
}
break;
case STARTALL:
i = SendMessage(hList,LB_GETCOUNT,0,0);
if( i != LB_ERR)
{
j = i;
i = SendMessage(hCombo,CB_GETCURSEL,0,0);
if( i != CB_ERR )
{
SendMessage(hCombo,CB_GETLBTEXT,(WPARAM) i,(LPARAM) Message );
strncpy(k,Message,1);
while ( j != -1 )
{
SendMessage(hList,LB_GETTEXT,(WPARAM)j,(LPARAM)Message);
sock = atoi(Message);
switch(k[0])
{
case 'c':
send(sock,"1",1,0);
break;
case 'f':
send(sock,"2",1,0);
break;
}
--j;
}
}
else
MessageBox(hwnd,"No item in the ComboBox is curentli selected","Eorror",0);
}
else
MessageBox(hwnd,"No item in the ListBox is curentli selected","Eorror",0);
break;
case STARTSEL:
i = SendMessage(hList,LB_GETCURSEL,0,0);
if( i != LB_ERR)
{
i = SendMessage(hCombo,CB_GETCURSEL,0,0);
if( i != CB_ERR)
{
b = SendMessage(hList,LB_GETTEXT,(WPARAM)i,(LPARAM)Message);
sock = atoi(Message);
if( i != CB_ERR )
{
SendMessage(hCombo,CB_GETLBTEXT,(WPARAM) i,(LPARAM) Message );
switch(Message[0])
{
case 'c':
send(sock,"1",1,0);
break;
case 'f':
send(sock,"2",1,0);
break;
}
}
}
else
MessageBox(hwnd,"No item in the ComboBox is curentli selected","Eorror",0);
}
else
MessageBox(hwnd,"No item in the ListBox is curentli selected","Eorror",0);
break;
}
break;
//---------------------------- WM_CLIENT ----------------------------//
case WM_CLIENT:
switch(lParam)
{
case FD_ACCEPT:
i = sizeof(addr);
sock = accept(ListenSock,(sockaddr*)&addr,&i);
if( sock == INVALID_SOCKET )
{
sprintf(Message,"Accept error - %d", WSAGetLastError());
MessageBox(hwnd,Message,"Error",NULL);
break;
}
memcpy(&ip,&addr.sin_addr.s_addr,4);
sprintf(Message,"%d : ip - %d.%d.%d.%d",sock,ip[0],ip[1],ip[2],ip[3]);
SendMessage(hList, LB_ADDSTRING, 0,(LPARAM) Message);
break;
case FD_READ:
break;
case FD_CLOSE:
sprintf(Message,"%d",wParam);
Message[3]='\0';
i = SendMessage(hList, LB_FINDSTRING, 0,(LPARAM) Message);
if( i == LB_ERR )
MessageBox(NULL,"Andefaund connection","Error",0);
else
SendMessage(hList, LB_DELETESTRING, i, 0);
shutdown(wParam,1);
closesocket(wParam);
break;
}
break;
}
delete[] k;
return DefWindowProc(hwnd,msg,wParam,lParam);
}