
-
1
-
2
-
3
-
4
-
5
-
6
-
7
-
8
-
9
-
10
-
11
-
12
-
13
-
14
-
15
-
16
-
17
-
18
-
19
-
20
-
21
-
22
-
23
-
24
-
25
-
26
-
27
-
28
-
29
-
30
-
31
-
32
-
33
-
34
-
35
-
36
-
37
-
38
-
39
-
40
-
41
-
42
-
43
-
44
-
45
-
46
-
47
-
48
-
49
-
50
-
51
-
52
-
53
-
54
-
55


본문내용
dateWindow(hwnd);
while(TRUE)
{
if (PeekMessage(&msg,NULL,0,0,PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
else
{
if (gSid!=INVALID_SOCKET)
{
int iError;
TimeVal tv={0L,0L};
SockAddrIn from;
FdSet rfds;
int fromlen=sizeof(from);
FD_ZERO(&rfds);
FD_SET(gSid,&rfds);
iError=select(32,&rfds,NULL,NULL,&tv);
if (iError==SOCKET_ERROR)
{
wsprintf(gszMsg,\"select Error!,error no=%d\",WSAGetLastError());
MessageBox(hwnd,gszMsg,\"Error\",MB_OK);
gSid=INVALID_SOCKET;
}
else if (FD_ISSET(gSid,(FdSet FAR *)&rfds))
{
int iRecvCnt;
glpszBuf=(LPTSTR)malloc(MAX_LEN);
iRecvCnt=recv(gSid,(char FAR *)glpszBuf,MAX_LEN-1,MSG_PEEK);
if (iRecvCnt==SOCKET_ERROR)
{
wsprintf(gszMsg,\"recv Error!,error no=%d\",WSAGetLastError());
MessageBox(hwnd,gszMsg,\"Error\",MB_OK);
gSid=INVALID_SOCKET;
}
else
{
glpszBuf[iRecvCnt]=\'\\0\';
InvalidateRect(hwnd,NULL,TRUE);
UpdateWindow(hwnd);
}
}
}
}
}
return msg.wParam;
}
LRESULT CALLBACK WndProc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam)
{
switch(msg)
{
HANDLE_MSG(hwnd,WM_CREATE,OnCreate);
HANDLE_MSG(hwnd,WM_PAINT,OnPaint);
HANDLE_MSG(hwnd,WM_SETFOCUS,OnSetfocus);
HANDLE_MSG(hwnd,WM_SIZE,OnSize);
HANDLE_MSG(hwnd,WM_DESTROY,OnDestroy);
}
return DefWindowProc(hwnd,msg,wParam,lParam);
}
BOOL OnCreate(HWND hwnd,LPCREATESTRUCT lpCS)
{
gHwndList=CreateWindow(\"ListBox\",NULL,WS_CHILD|WS_VISIBLE,0,0,0,0,hwnd,NULL,GetWindowLong(hwnd,GWL_HINSTANCE),NULL);
if (WSAStartup(0x101,&gWsaData)!=0)
{
wsprintf(gszMsg,\"WSAStartup Error!\");
MessageBox(hwnd,gszMsg,\"Error\",MB_OK);
return FALSE;
}
gSid=socket(AF_INET,SOCK_STREAM,0);
if (gSid==INVALID_SOCKET)
{
wsprintf(gszMsg,\"socket Error!,error no=%d\",WSAGetLastError());
MessageBox(hwnd,gszMsg,\"Error\",MB_OK);
return FALSE;
}
gsaddr.sin_family=AF_INET;
gsaddr.sin_addr.s_addr=htonl(INADDR_ANY);
gsaddr.sin_port=htons(PORT_NUM);
if (bind(gSid,(SockAddr FAR *)&gsaddr,sizeof(gsaddr))==SOCKET_ERROR)
{
wsprintf(gszMsg,\"bind Error!,errno=%d\",WSAGetLastError());
MessageBox(hwnd,gszMsg,\"Error\",MB_OK);
}
return TRUE;
}
void OnSetfocus(HWND hwnd,HWND hwndOldFocus)
{
SetFocus(hwnd);
}
void OnSize(HWND hwnd, UINT state, int cx, int cy)
{
MoveWindow(gHwndList,0,0,cx,cy,TRUE);
}
void OnDestroy(HWND hwnd)
{
if (gSid!=INVALID_SOCKET) closesocket(gSid);
WSACleanup();
PostQuitMessage(0);
}
void OnPaint(HWND hwnd)
{
HDC hdc;
PAINTSTRUCT ps;
hdc=BeginPaint(hwnd,&ps);
EndPaint(hwnd,&ps);
if (glpszBuf!=NULL) ListBox_AddItemData(gHwndList,glpszBuf);
}
API 로만 보는 소켓 프로그래밍#1(블록화 함수)
소켓 프로그램밍은 상당히 어렵다고 생각하기는 쉽지만 이것은 아마 소켓 프로그래밍에
대한 자료가 적기 때문일 것이다.사실 소켓 프로그래밍은 TCP/IP에대한 어느정도의
이해가 요구되고 또한 알아야할 함수나 많다.또한 소켓 프로그래밍은 네트워크가
돌아가야하는 관계로 개인이 집에서 실습해보기는 사실상 어렵다.
그래서 소켓 프로그래밍이 어렵게 느껴지는 것일뿐이라고 생각한다.
예전에는 TCP/IP는 윈도우에서 직접 지원을 해주지를 않았다.따라서 예전 윈도우 3.1
시대에는 트럼펫 윈속이나 기타 등등의 윈속을 먼저 실행시켜주어야만 했으나
윈도우 95시대에서는 TCP/IP 나 UDP등을 직접 지원해주기 때문에 트럼펫 윈속 등을
뛰워줄필요가 없다.따라서 이제는 사용자는 직접 윈속을 뛰우고 다시 익스플로러등을
뛰우는 것이 아닌직접 익스플로러만 돌리면 되게 되었다.
또한 지금도 거의 그렇지만 앞으로의 모든 프로그램에는 네트워킹 기능이 옵션이 아닌
필수가 될것이 거의 확실하다고 생각한다.
(참고로 돈벌기 위해서는 방법은 네트워킹은 필수가
while(TRUE)
{
if (PeekMessage(&msg,NULL,0,0,PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
else
{
if (gSid!=INVALID_SOCKET)
{
int iError;
TimeVal tv={0L,0L};
SockAddrIn from;
FdSet rfds;
int fromlen=sizeof(from);
FD_ZERO(&rfds);
FD_SET(gSid,&rfds);
iError=select(32,&rfds,NULL,NULL,&tv);
if (iError==SOCKET_ERROR)
{
wsprintf(gszMsg,\"select Error!,error no=%d\",WSAGetLastError());
MessageBox(hwnd,gszMsg,\"Error\",MB_OK);
gSid=INVALID_SOCKET;
}
else if (FD_ISSET(gSid,(FdSet FAR *)&rfds))
{
int iRecvCnt;
glpszBuf=(LPTSTR)malloc(MAX_LEN);
iRecvCnt=recv(gSid,(char FAR *)glpszBuf,MAX_LEN-1,MSG_PEEK);
if (iRecvCnt==SOCKET_ERROR)
{
wsprintf(gszMsg,\"recv Error!,error no=%d\",WSAGetLastError());
MessageBox(hwnd,gszMsg,\"Error\",MB_OK);
gSid=INVALID_SOCKET;
}
else
{
glpszBuf[iRecvCnt]=\'\\0\';
InvalidateRect(hwnd,NULL,TRUE);
UpdateWindow(hwnd);
}
}
}
}
}
return msg.wParam;
}
LRESULT CALLBACK WndProc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam)
{
switch(msg)
{
HANDLE_MSG(hwnd,WM_CREATE,OnCreate);
HANDLE_MSG(hwnd,WM_PAINT,OnPaint);
HANDLE_MSG(hwnd,WM_SETFOCUS,OnSetfocus);
HANDLE_MSG(hwnd,WM_SIZE,OnSize);
HANDLE_MSG(hwnd,WM_DESTROY,OnDestroy);
}
return DefWindowProc(hwnd,msg,wParam,lParam);
}
BOOL OnCreate(HWND hwnd,LPCREATESTRUCT lpCS)
{
gHwndList=CreateWindow(\"ListBox\",NULL,WS_CHILD|WS_VISIBLE,0,0,0,0,hwnd,NULL,GetWindowLong(hwnd,GWL_HINSTANCE),NULL);
if (WSAStartup(0x101,&gWsaData)!=0)
{
wsprintf(gszMsg,\"WSAStartup Error!\");
MessageBox(hwnd,gszMsg,\"Error\",MB_OK);
return FALSE;
}
gSid=socket(AF_INET,SOCK_STREAM,0);
if (gSid==INVALID_SOCKET)
{
wsprintf(gszMsg,\"socket Error!,error no=%d\",WSAGetLastError());
MessageBox(hwnd,gszMsg,\"Error\",MB_OK);
return FALSE;
}
gsaddr.sin_family=AF_INET;
gsaddr.sin_addr.s_addr=htonl(INADDR_ANY);
gsaddr.sin_port=htons(PORT_NUM);
if (bind(gSid,(SockAddr FAR *)&gsaddr,sizeof(gsaddr))==SOCKET_ERROR)
{
wsprintf(gszMsg,\"bind Error!,errno=%d\",WSAGetLastError());
MessageBox(hwnd,gszMsg,\"Error\",MB_OK);
}
return TRUE;
}
void OnSetfocus(HWND hwnd,HWND hwndOldFocus)
{
SetFocus(hwnd);
}
void OnSize(HWND hwnd, UINT state, int cx, int cy)
{
MoveWindow(gHwndList,0,0,cx,cy,TRUE);
}
void OnDestroy(HWND hwnd)
{
if (gSid!=INVALID_SOCKET) closesocket(gSid);
WSACleanup();
PostQuitMessage(0);
}
void OnPaint(HWND hwnd)
{
HDC hdc;
PAINTSTRUCT ps;
hdc=BeginPaint(hwnd,&ps);
EndPaint(hwnd,&ps);
if (glpszBuf!=NULL) ListBox_AddItemData(gHwndList,glpszBuf);
}
API 로만 보는 소켓 프로그래밍#1(블록화 함수)
소켓 프로그램밍은 상당히 어렵다고 생각하기는 쉽지만 이것은 아마 소켓 프로그래밍에
대한 자료가 적기 때문일 것이다.사실 소켓 프로그래밍은 TCP/IP에대한 어느정도의
이해가 요구되고 또한 알아야할 함수나 많다.또한 소켓 프로그래밍은 네트워크가
돌아가야하는 관계로 개인이 집에서 실습해보기는 사실상 어렵다.
그래서 소켓 프로그래밍이 어렵게 느껴지는 것일뿐이라고 생각한다.
예전에는 TCP/IP는 윈도우에서 직접 지원을 해주지를 않았다.따라서 예전 윈도우 3.1
시대에는 트럼펫 윈속이나 기타 등등의 윈속을 먼저 실행시켜주어야만 했으나
윈도우 95시대에서는 TCP/IP 나 UDP등을 직접 지원해주기 때문에 트럼펫 윈속 등을
뛰워줄필요가 없다.따라서 이제는 사용자는 직접 윈속을 뛰우고 다시 익스플로러등을
뛰우는 것이 아닌직접 익스플로러만 돌리면 되게 되었다.
또한 지금도 거의 그렇지만 앞으로의 모든 프로그램에는 네트워킹 기능이 옵션이 아닌
필수가 될것이 거의 확실하다고 생각한다.
(참고로 돈벌기 위해서는 방법은 네트워킹은 필수가
추천자료
집단상담 프로그램 요약과 경험 보고(자기성장 집단 프로그램)
솔루션 프로그램이 최근 텔레비전 프로그램에서 하나의 장르로 자리매김한 이유는 무엇이고 ...
WEB기반 프로그램을 중심으로 한 국내, 외 원격 교육 프로그램 비교․분석
객체지향프로그램_자판기프로그램
프로그램개발과 평가- 프로그램개발과 기획의 차이,SMART 기법
[사회과학] 최근주목받고 있는 보육프로그램 정리(생태 · 친환경 보육프로그램)A4-3매
청소년활동 프로그램의 개발과 평가, 프로그램 개발의 이론 및 개발과정
프로그램 평가조사1 (hwp,PPT자료) -프로그램 평가의 목적, 평가 고려사항, 유형
최근주목받고 있는 보육프로그램 정리(생태 · 친환경 보육프로그램)A4-3매
[프로그램개발과평가 사업계획서] 편부모가정의 (아동)학대 피해 아동들을 위한 프로그램 - ...
[여가자원의 이용프로그램] 여가프로그램의 의의와 유형 (종류)
[스트레스관리프로그램] 스트레스 관리 프로그램의 유형 (스트레스 및 그 원인을 진단하고 확...
(학교폭력예방프로그램) 국내 및 해외의 학교폭력예방 프로그램
소개글