информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Атака на InternetЗа кого нас держат?Сетевые кракеры и правда о деле Левина
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Китайский прорыв из ESXi 
 С наступающим 
 libmdbx => MithrilDB 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
WSAAsyncSelect 23.12.01 10:19  
Автор: делитант Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Не работает :((( !!! хотя чему тут не работать ???
#include <windows.h>
#include <winsock.h>
#include <stdio.h>
#define WM_SELECT WM_USER+1

LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);

MSG msg;
HWND hWnd;

WSADATA ws;
SOCKET s;
sockaddr_in addr, newaddr;

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{
WNDCLASS wndclass ;
wndclass.style = 0;
wndclass.lpfnWndProc = WndProc;
wndclass.cbClsExtra = 0;
wndclass.cbWndExtra = 0;
wndclass.hInstance = hInstance;
wndclass.hIcon = NULL;
wndclass.hCursor = NULL;
wndclass.hbrBackground = NULL;
wndclass.lpszMenuName = NULL ;
wndclass.lpszClassName = "name" ;
if(!RegisterClass(&wndclass)) return 0;

hWnd=CreateWindow("name",NULL,NULL,
NULL,NULL,NULL,NULL,NULL,NULL,hInstance,NULL);
//------------------------------------------------------------------------------//
if(WSAStartup(0x101,&ws)!=0)
return 0;
s=socket(AF_INET,SOCK_STREAM,0);
if(s==INVALID_SOCKET)
return 0;
addr.sin_family=AF_INET;
addr.sin_port=htons(80);
addr.sin_addr.s_addr=INADDR_ANY;
if(bind(s,(sockaddr*)&addr,sizeof(addr))==SOCKET_ERROR)
return 0;
if(listen(s,1)==SOCKET_ERROR)
return 0;
if(WSAAsyncSelect(s,hWnd,WM_SELECT,FD_ACCEPT|FD_READ|FD_CLOSE)==SOCKET_ERROR)
return 0;
//------------------------------------------------------------------------------//
while(GetMessage(&msg,NULL,0,0)) { }
return msg.wParam;
return 0;
}
LRESULT CALLBACK WndProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam)
{
switch(msg)
{
case WM_SELECT:
MessageBox(0,"select",0,0);
switch(WSAGETSELECTEVENT(lParam))
{
case FD_ACCEPT:
MessageBox(0,"accept",0,0);
break;
case FD_READ:
MessageBox(0,"read",0,0);
break;
case FD_CLOSE:
break;
}
break;
default:
return DefWindowProc(hWnd,msg,wParam,lParam);
break;
}
return 0;
}
WSAAsyncSelect 23.12.01 13:20  
Автор: ih8u <i hate you> Статус: Member
<"чистая" ссылка>
Попробуй так:

int SockMsg;
SockMsg = RegisterWindowMessage("Socket Message");
ON_REGISTERED_MESSAGE(SockMsg, OnSockMsg)

SOCKET s;
s = socket(AF_INET, SOCK_STREAM, 0);

int iVal = 0;
int ret;
ret = setsockopt(s, SOL_SOCKET, SO_REUSEADDR, (const char *)&iVal, sizeof (iVal));
if(ret == SOCKET_ERROR)
return 0;

WSAAsyncSelect(s, m_hWnd, SockMsg, FD_READ | FD_WRITE | FD_CONNECT);


LONG OnSockMsg(SOCKET s, LONG loEvent)
{
WORD wError;
WORD wEvent;
int ret;

wError = WSAGETSELECTERROR(loEvent);
wEvent = WSAGETSELECTEVENT(loEvent);
ret = 0;
switch(wEvent)
{
case FD_CONNECT:
{
if(!wError)
{
return 0; //Connect established
}
else
return 0;//Connection not established
break;
}
case FD_READ:
{
//recv
break;
}
default:
{
break;
}
}
return(0);
}

Так работает в диалоговом окне,
или ещо можно сделать вообще без окон, юзая не WSAAsyncSelect а WSAEventSelect
а потом с помощью WSANETWORKEVENTS делаешь так:
SOCKET s;
s = socket(...);
WSAEVENT hEvent;
hEvent = WSACreateEvent();
WSAEventSelect(s, hEvent, FD_READ | FD_WRITE | FD_CONNECT);
connect(....);
WSANETWORKEVENTS events;
while(1)
{
DWORD dw = WSAWaitForMultipleEvents(1, &hEvent, FALSE, 10000, FALSE);
if(dw == WSA_WAIT_TIMEOUT)
{//Timeout 10000}
WSAEnumNetworkEvents(s, hEvent, &events);
if(events.lNetworkEvents & FD_CONNECT)
{break;}
if(events.lNetworkEvents & FD_WRITE)
{break;}
if(events.lNetworkEvents & FD_READ)
{break;}
}
WSACloseEvent(hEvent);

Удачи!
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2026 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach