Sunmoon_BIT/Win32API
WSAAsyncSelect 예제
와앙노
2010. 2. 22. 09:18
"ASYNSELECT_SERVER.h"
#pragma comment (lib,"ws2_32")
#include <winsock2.h>
#include <winsock2.h>
#include "resource.h"
#include <stdio.h>
#include <windows.h>
#define MWM_SOCK (WM_APP +1)
#define C_IP "192.168.34.110"
#define MY_IP "192.168.34.110"
#define USE_PORT 1444
BOOL CALLBACK DlgProc(HWND hDlg,UINT iMessage,WPARAM wParam,LPARAM lParam);
BOOL DlgCmd(HWND hDlg,WPARAM wParam);
BOOL InitSock(HWND hDlg);
BOOL Onsock(HWND hDlg,SOCKET sock,WORD msg,WORD eid);
void AcceptProc(HWND hDlg,SOCKET sock);
void ReadMSG(HWND hDlg,SOCKET sock);
"ASYNSELECT_SERVER.cpp"
#include "ASYNSELECT_SERVER.h"
int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{
WSADATA wsadata;
if(WSAStartup(MAKEWORD(2,2),&wsadata) != 0)
{
return 0;
}
HANDLE hMutex = CreateMutex(NULL,FALSE,"ASYNC_SERVER");
if(GetLastError() != ERROR_ALREADY_EXISTS)
{
DialogBox(hInstance,MAKEINTRESOURCE(IDD_DIALOG1),0,DlgProc);
CloseHandle(hMutex);
WSACleanup();
return 0;
}
MessageBox(NULL,"이미 실행 중 입니다","경고",MB_OK);
CloseHandle(hMutex);
WSACleanup();
return 0;
}
BOOL CALLBACK DlgProc(HWND hDlg,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
switch(iMessage)
{
case WM_INITDIALOG : return InitSock(hDlg);
case WM_COMMAND : return DlgCmd(hDlg,wParam);
case MWM_SOCK : return Onsock(hDlg,(SOCKET)wParam,LOWORD(lParam),HIWORD(lParam));
}
return FALSE;
}
BOOL DlgCmd(HWND hDlg,WPARAM wParam)
{
switch(LOWORD(wParam))
{
case IDCANCEL : EndDialog(hDlg,IDD_DIALOG1);
}
return TRUE;
}
BOOL InitSock(HWND hDlg)
{
SOCKET sock = socket(PF_INET,SOCK_STREAM,IPPROTO_TCP);
SOCKADDR_IN servaddr = {0,};
servaddr.sin_addr.s_addr = inet_addr(MY_IP);
servaddr.sin_port = htons(USE_PORT);
servaddr.sin_family = PF_INET;
bind(sock,(SOCKADDR *)&servaddr,sizeof(servaddr));
listen(sock,3);
WSAAsyncSelect(sock,hDlg,MWM_SOCK,FD_ACCEPT);
return TRUE;
}
BOOL Onsock(HWND hDlg,SOCKET sock,WORD msg,WORD eid)
{
switch(msg)
{
case FD_ACCEPT : AcceptProc(hDlg,sock); break;
case FD_READ : ReadMSG(hDlg,sock); break;
}
return TRUE;
}
void AcceptProc(HWND hDlg,SOCKET sock)
{
SOCKADDR_IN clientaddr = {0,};
int len = sizeof(clientaddr);
SOCKET dosock = accept(sock,(SOCKADDR *)&clientaddr,&len);
WSAAsyncSelect(dosock,hDlg,MWM_SOCK,FD_READ);
}
void ReadMSG(HWND hDlg,SOCKET sock)
{
int MSGlen;
char msg[256];
memset(msg,0,256);
recv(sock,(char*)&MSGlen,sizeof(MSGlen),0);
recv(sock,msg,MSGlen,0);
//MessageBox(hDlg,"메세지가 도착하였습니다","OK",MB_OK);
SendMessage(GetDlgItem(hDlg,IDC_LIST1),LB_ADDSTRING,0,(LPARAM)msg);//list에 추가!
}
int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{
WSADATA wsadata;
if(WSAStartup(MAKEWORD(2,2),&wsadata) != 0)
{
return 0;
}
HANDLE hMutex = CreateMutex(NULL,FALSE,"ASYNC_SERVER");
if(GetLastError() != ERROR_ALREADY_EXISTS)
{
DialogBox(hInstance,MAKEINTRESOURCE(IDD_DIALOG1),0,DlgProc);
CloseHandle(hMutex);
WSACleanup();
return 0;
}
MessageBox(NULL,"이미 실행 중 입니다","경고",MB_OK);
CloseHandle(hMutex);
WSACleanup();
return 0;
}
BOOL CALLBACK DlgProc(HWND hDlg,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
switch(iMessage)
{
case WM_INITDIALOG : return InitSock(hDlg);
case WM_COMMAND : return DlgCmd(hDlg,wParam);
case MWM_SOCK : return Onsock(hDlg,(SOCKET)wParam,LOWORD(lParam),HIWORD(lParam));
}
return FALSE;
}
BOOL DlgCmd(HWND hDlg,WPARAM wParam)
{
switch(LOWORD(wParam))
{
case IDCANCEL : EndDialog(hDlg,IDD_DIALOG1);
}
return TRUE;
}
BOOL InitSock(HWND hDlg)
{
SOCKET sock = socket(PF_INET,SOCK_STREAM,IPPROTO_TCP);
SOCKADDR_IN servaddr = {0,};
servaddr.sin_addr.s_addr = inet_addr(MY_IP);
servaddr.sin_port = htons(USE_PORT);
servaddr.sin_family = PF_INET;
bind(sock,(SOCKADDR *)&servaddr,sizeof(servaddr));
listen(sock,3);
WSAAsyncSelect(sock,hDlg,MWM_SOCK,FD_ACCEPT);
return TRUE;
}
BOOL Onsock(HWND hDlg,SOCKET sock,WORD msg,WORD eid)
{
switch(msg)
{
case FD_ACCEPT : AcceptProc(hDlg,sock); break;
case FD_READ : ReadMSG(hDlg,sock); break;
}
return TRUE;
}
void AcceptProc(HWND hDlg,SOCKET sock)
{
SOCKADDR_IN clientaddr = {0,};
int len = sizeof(clientaddr);
SOCKET dosock = accept(sock,(SOCKADDR *)&clientaddr,&len);
WSAAsyncSelect(dosock,hDlg,MWM_SOCK,FD_READ);
}
void ReadMSG(HWND hDlg,SOCKET sock)
{
int MSGlen;
char msg[256];
memset(msg,0,256);
recv(sock,(char*)&MSGlen,sizeof(MSGlen),0);
recv(sock,msg,MSGlen,0);
//MessageBox(hDlg,"메세지가 도착하였습니다","OK",MB_OK);
SendMessage(GetDlgItem(hDlg,IDC_LIST1),LB_ADDSTRING,0,(LPARAM)msg);//list에 추가!
}
"ASYNCSELECT_CLIENT.h"
#pragma comment (lib,"ws2_32")
#include <winsock2.h>
#include <winsock2.h>
#include "resource.h"
#include <stdio.h>
#include <windows.h>
#include <stdio.h>
#include <windows.h>
#define MWM_SOCK (WM_APP +1)
#define C_IP "192.168.34.110"
#define MY_IP "192.168.34.110"
#define USE_PORT 1444
BOOL CALLBACK DlgProc(HWND hDlg,UINT iMessage,WPARAM wParam,LPARAM lParam);
BOOL InitSock(HWND hDlg);
BOOL DlgCmd(HWND hDlg,WPARAM wParam);
BOOL OnSock(HWND hDlg,SOCKET sock,WORD msg,WORD eid);
void SendMSG(HWND hDlg);
void WriteProc(HWND hDlg,SOCKET sock);
void ConnectProc(HWND hDlg,SOCKET sock);
BOOL InitSock(HWND hDlg);
BOOL DlgCmd(HWND hDlg,WPARAM wParam);
BOOL OnSock(HWND hDlg,SOCKET sock,WORD msg,WORD eid);
void SendMSG(HWND hDlg);
void WriteProc(HWND hDlg,SOCKET sock);
void ConnectProc(HWND hDlg,SOCKET sock);
"ASYNCSELECT_CLIENT.cpp"
#include "ASYNCSELECT_CLIENT.h"
INT APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstacne,LPSTR lpCmdLine,int nShowCmd)
{
WSADATA wsadata;
if(WSAStartup(MAKEWORD(2,2),&wsadata) != 0)
{
return 0;
}
HANDLE hMutex = CreateMutex(NULL,FALSE,"C_MUTEX");
if(GetLastError() != ERROR_ALREADY_EXISTS)
{
DialogBox(hInstance,MAKEINTRESOURCE(IDD_DIALOG1),0,DlgProc);
CloseHandle(hMutex);
WSACleanup();
return 0;
}
MessageBox(NULL,"이미 실행 중 입니다","ERROR",MB_OK);
CloseHandle(hMutex);
WSACleanup();
return 0;
}
{
WSADATA wsadata;
if(WSAStartup(MAKEWORD(2,2),&wsadata) != 0)
{
return 0;
}
HANDLE hMutex = CreateMutex(NULL,FALSE,"C_MUTEX");
if(GetLastError() != ERROR_ALREADY_EXISTS)
{
DialogBox(hInstance,MAKEINTRESOURCE(IDD_DIALOG1),0,DlgProc);
CloseHandle(hMutex);
WSACleanup();
return 0;
}
MessageBox(NULL,"이미 실행 중 입니다","ERROR",MB_OK);
CloseHandle(hMutex);
WSACleanup();
return 0;
}
BOOL CALLBACK DlgProc(HWND hDlg,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
switch(iMessage)
{
case WM_INITDIALOG : return InitSock(hDlg);
case WM_COMMAND : return DlgCmd(hDlg,wParam);;
case MWM_SOCK : return OnSock(hDlg,(SOCKET)wParam,LOWORD(lParam),HIWORD(lParam));
}
return FALSE;
}
{
switch(iMessage)
{
case WM_INITDIALOG : return InitSock(hDlg);
case WM_COMMAND : return DlgCmd(hDlg,wParam);;
case MWM_SOCK : return OnSock(hDlg,(SOCKET)wParam,LOWORD(lParam),HIWORD(lParam));
}
return FALSE;
}
BOOL InitSock(HWND hDlg)
{
return TRUE;
}
{
return TRUE;
}
BOOL DlgCmd(HWND hDlg,WPARAM wParam)
{
switch(LOWORD(wParam))
{
case IDCANCEL : EndDialog(hDlg,IDD_DIALOG1); break;
case IDOK : SendMSG(hDlg); break;
}
return TRUE;
}
{
switch(LOWORD(wParam))
{
case IDCANCEL : EndDialog(hDlg,IDD_DIALOG1); break;
case IDOK : SendMSG(hDlg); break;
}
return TRUE;
}
BOOL OnSock(HWND hDlg,SOCKET sock,WORD msg,WORD eid)
{
switch(msg)
{
case FD_CONNECT : ConnectProc(hDlg,sock); break;
case FD_WRITE : WriteProc(hDlg,sock); break;
}
return TRUE;
}
{
switch(msg)
{
case FD_CONNECT : ConnectProc(hDlg,sock); break;
case FD_WRITE : WriteProc(hDlg,sock); break;
}
return TRUE;
}
void SendMSG(HWND hDlg)
{
SOCKET sock = socket(PF_INET,SOCK_STREAM,IPPROTO_TCP);
SOCKADDR_IN clientaddr = {0,};
clientaddr.sin_addr.s_addr=inet_addr(MY_IP);
clientaddr.sin_port = htons(USE_PORT);
clientaddr.sin_family = PF_INET;
WSAAsyncSelect(sock,hDlg,MWM_SOCK,FD_CONNECT);
connect(sock,(SOCKADDR*)&clientaddr,sizeof(clientaddr));
}
{
SOCKET sock = socket(PF_INET,SOCK_STREAM,IPPROTO_TCP);
SOCKADDR_IN clientaddr = {0,};
clientaddr.sin_addr.s_addr=inet_addr(MY_IP);
clientaddr.sin_port = htons(USE_PORT);
clientaddr.sin_family = PF_INET;
WSAAsyncSelect(sock,hDlg,MWM_SOCK,FD_CONNECT);
connect(sock,(SOCKADDR*)&clientaddr,sizeof(clientaddr));
}
void ConnectProc(HWND hDlg,SOCKET sock)
{
WSAAsyncSelect(sock,hDlg,MWM_SOCK,FD_WRITE);
}
{
WSAAsyncSelect(sock,hDlg,MWM_SOCK,FD_WRITE);
}
void WriteProc(HWND hDlg,SOCKET sock)
{
char Message[256+1];
GetDlgItemText(hDlg,IDC_EDIT1,Message,sizeof(Message));
int MSGlen = strlen(Message);
send(sock,(char*)&MSGlen,sizeof(int),0);
send(sock,Message,MSGlen,0);
SetDlgItemText(hDlg,IDC_EDIT1,"");
}
{
char Message[256+1];
GetDlgItemText(hDlg,IDC_EDIT1,Message,sizeof(Message));
int MSGlen = strlen(Message);
send(sock,(char*)&MSGlen,sizeof(int),0);
send(sock,Message,MSGlen,0);
SetDlgItemText(hDlg,IDC_EDIT1,"");
}