那位高手帮我看看这个程序,,,是从网上下载来的,但是看不懂,能帮我详细注解一下吗?不胜感激啊!!!这是vc的win32程序。
#include "resource.h"
#include "Server.h"HWND hDialog=0;
HINSTANCE hInst;
char szBuff[ 80 ];
SOCKET sock;
int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{ hDialog = CreateDialog(hInstance,
MAKEINTRESOURCE (IDD_DEMO),
0,
DialogProc);
if (!hDialog)
{
char buf[100];
wsprintf (buf,"Error x%x", GetLastError());
MessageBox(0,buf,"CreateDialog",MB_ICONEXCLAMATION | MB_OK);
return 1;
} MSG msg;
int status;
hInst = hInstance;
//消息循环
//If message other than WM_QUIT, the return value is nonzero.
//If the WM_QUIT message, the return value is 0.
//If there is an error, the return value is -1.
while ((status=GetMessage(&msg,0,0,0))!=0)
{
if (status==-1)
return -1;
//whether a message is intended for the specified dialog box,
//and if it is, processes the message to the Dialog procedure.
//else ,process the message as usual.
if (!IsDialogMessage(hDialog,&msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
return msg.wParam;
} //4 dialog procedure
BOOL CALLBACK DialogProc(HWND hDlg,
UINT message,
WPARAM wParam,
LPARAM lParam)
{
switch (message)
{
// inite dialog
case WM_INITDIALOG:
{
int status;
WSADATA WSAData;
char szTemp[80];
if ((status = WSAStartup(MAKEWORD(1,1), &WSAData)) == 0)
{
MessageBox( hDlg, WSAData.szDescription, WSAData.szSystemStatus, MB_OK);
}
else
{
sprintf(szTemp, "%d is the err", status);
MessageBox( hDlg, szTemp, "Error", MB_OK);
}
}
break;
//close the dialog
case WM_CLOSE:
DestroyWindow(hDlg); //send WM_DESTROY
break;
//destroy the window
case WM_DESTROY:
PostQuitMessage(0); //send WM_QUIT,then GetMessage is broken
break;
case WM_COMMAND:
switch (GET_WM_COMMAND_ID(wParam,lParam))
{
case IDCANCEL:
EndDialog(hDlg,TRUE);
DestroyWindow(hDlg); //send WM_QUIT,then GetMessage is broken
break;
case IDOK:
char szText[128],buf[256];
GetDlgItemText(hDlg,IDC_TXT,szText,sizeof(szText));
wsprintf(buf,"Hello! you click OK.\n\n text is:%s",szText);
MessageBox(hDlg,buf,"Dialog test",0);
break; case IDC_BUTTON1:
StartUp();
break; case ID_SEND:
GetDlgItemText( hDlg, IDC_SENDM, szBuff, 80);
send(sock, szBuff, strlen(szBuff), NO_FLAGS_SET ); }
break; case WSA_READ:
{
int status;
char szTemp[ MY_MSG_LENGTH ]; if (WSAGETSELECTEVENT(lParam) == FD_READ)
{
status = recv((SOCKET)wParam, szTemp, MY_MSG_LENGTH, NO_FLAGS_SET );
if (status)
{
szTemp[ status ] = '\0';
SetDlgItemText(hDlg, IDC_RESV, szTemp);
}
else
MessageBox( hDlg, "Connection broken", "Error", MB_OK);
}
} default:
return FALSE;
}
return TRUE;
} int StartUp(void)
{
//SOCKET sock;
SOCKADDR_IN local_sin;
u_short portno;
int acc_sin_len;
SOCKADDR_IN acc_sin;
int status; sock = socket( AF_INET, SOCK_STREAM, 0);
if (sock == INVALID_SOCKET)
{
SetDlgItemText(hDialog, IDC_STATUS, "socket()出错");
closesocket(sock);
return 0;
} local_sin.sin_family = AF_INET;
local_sin.sin_addr.s_addr = INADDR_ANY; GetDlgItemText( hDialog, IDC_PORT, szBuff, 80);
portno = atoi(szBuff);
local_sin.sin_port = htons(portno); SetWindowText( hDialog, "等待连接...");
SetDlgItemText(hDialog, IDC_STATUS, "监听状态"); if(bind( sock, (struct sockaddr FAR *) &local_sin, sizeof(local_sin)) == SOCKET_ERROR)
{
sprintf(szBuff, "%d 出错", WSAGetLastError());
SetDlgItemText(hDialog, IDC_STATUS, szBuff);
return 0;
} if(listen( sock, MAX_PENDING_CONNECTS ) < 0)
{
sprintf(szBuff, "%d 出错", WSAGetLastError());
SetDlgItemText(hDialog, IDC_STATUS, szBuff);
return 0;
} acc_sin_len = sizeof(acc_sin); sock = accept( sock,(struct sockaddr FAR *) &acc_sin,
(int FAR *) &acc_sin_len );
if (sock < 0)
{
sprintf(szBuff, "%d 出错", WSAGetLastError());
SetDlgItemText(hDialog, IDC_STATUS, szBuff);
return 0;
} SetDlgItemText(hDialog, IDC_STATUS, "建立一个连接");
EnableWindow( GetDlgItem( hDialog, IDC_PORT ), FALSE ); if ((status = WSAAsyncSelect( sock, hDialog, WSA_READ, FD_READ | FD_CLOSE )) > 0)
{
wsprintf(szBuff, "%d (0x%x)");
SetDlgItemText(hDialog, IDC_STATUS, szBuff);
closesocket( sock );
} return 1;
}
#include "resource.h"
#include "Server.h"HWND hDialog=0;
HINSTANCE hInst;
char szBuff[ 80 ];
SOCKET sock;
int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{ hDialog = CreateDialog(hInstance,
MAKEINTRESOURCE (IDD_DEMO),
0,
DialogProc);
if (!hDialog)
{
char buf[100];
wsprintf (buf,"Error x%x", GetLastError());
MessageBox(0,buf,"CreateDialog",MB_ICONEXCLAMATION | MB_OK);
return 1;
} MSG msg;
int status;
hInst = hInstance;
//消息循环
//If message other than WM_QUIT, the return value is nonzero.
//If the WM_QUIT message, the return value is 0.
//If there is an error, the return value is -1.
while ((status=GetMessage(&msg,0,0,0))!=0)
{
if (status==-1)
return -1;
//whether a message is intended for the specified dialog box,
//and if it is, processes the message to the Dialog procedure.
//else ,process the message as usual.
if (!IsDialogMessage(hDialog,&msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
return msg.wParam;
} //4 dialog procedure
BOOL CALLBACK DialogProc(HWND hDlg,
UINT message,
WPARAM wParam,
LPARAM lParam)
{
switch (message)
{
// inite dialog
case WM_INITDIALOG:
{
int status;
WSADATA WSAData;
char szTemp[80];
if ((status = WSAStartup(MAKEWORD(1,1), &WSAData)) == 0)
{
MessageBox( hDlg, WSAData.szDescription, WSAData.szSystemStatus, MB_OK);
}
else
{
sprintf(szTemp, "%d is the err", status);
MessageBox( hDlg, szTemp, "Error", MB_OK);
}
}
break;
//close the dialog
case WM_CLOSE:
DestroyWindow(hDlg); //send WM_DESTROY
break;
//destroy the window
case WM_DESTROY:
PostQuitMessage(0); //send WM_QUIT,then GetMessage is broken
break;
case WM_COMMAND:
switch (GET_WM_COMMAND_ID(wParam,lParam))
{
case IDCANCEL:
EndDialog(hDlg,TRUE);
DestroyWindow(hDlg); //send WM_QUIT,then GetMessage is broken
break;
case IDOK:
char szText[128],buf[256];
GetDlgItemText(hDlg,IDC_TXT,szText,sizeof(szText));
wsprintf(buf,"Hello! you click OK.\n\n text is:%s",szText);
MessageBox(hDlg,buf,"Dialog test",0);
break; case IDC_BUTTON1:
StartUp();
break; case ID_SEND:
GetDlgItemText( hDlg, IDC_SENDM, szBuff, 80);
send(sock, szBuff, strlen(szBuff), NO_FLAGS_SET ); }
break; case WSA_READ:
{
int status;
char szTemp[ MY_MSG_LENGTH ]; if (WSAGETSELECTEVENT(lParam) == FD_READ)
{
status = recv((SOCKET)wParam, szTemp, MY_MSG_LENGTH, NO_FLAGS_SET );
if (status)
{
szTemp[ status ] = '\0';
SetDlgItemText(hDlg, IDC_RESV, szTemp);
}
else
MessageBox( hDlg, "Connection broken", "Error", MB_OK);
}
} default:
return FALSE;
}
return TRUE;
} int StartUp(void)
{
//SOCKET sock;
SOCKADDR_IN local_sin;
u_short portno;
int acc_sin_len;
SOCKADDR_IN acc_sin;
int status; sock = socket( AF_INET, SOCK_STREAM, 0);
if (sock == INVALID_SOCKET)
{
SetDlgItemText(hDialog, IDC_STATUS, "socket()出错");
closesocket(sock);
return 0;
} local_sin.sin_family = AF_INET;
local_sin.sin_addr.s_addr = INADDR_ANY; GetDlgItemText( hDialog, IDC_PORT, szBuff, 80);
portno = atoi(szBuff);
local_sin.sin_port = htons(portno); SetWindowText( hDialog, "等待连接...");
SetDlgItemText(hDialog, IDC_STATUS, "监听状态"); if(bind( sock, (struct sockaddr FAR *) &local_sin, sizeof(local_sin)) == SOCKET_ERROR)
{
sprintf(szBuff, "%d 出错", WSAGetLastError());
SetDlgItemText(hDialog, IDC_STATUS, szBuff);
return 0;
} if(listen( sock, MAX_PENDING_CONNECTS ) < 0)
{
sprintf(szBuff, "%d 出错", WSAGetLastError());
SetDlgItemText(hDialog, IDC_STATUS, szBuff);
return 0;
} acc_sin_len = sizeof(acc_sin); sock = accept( sock,(struct sockaddr FAR *) &acc_sin,
(int FAR *) &acc_sin_len );
if (sock < 0)
{
sprintf(szBuff, "%d 出错", WSAGetLastError());
SetDlgItemText(hDialog, IDC_STATUS, szBuff);
return 0;
} SetDlgItemText(hDialog, IDC_STATUS, "建立一个连接");
EnableWindow( GetDlgItem( hDialog, IDC_PORT ), FALSE ); if ((status = WSAAsyncSelect( sock, hDialog, WSA_READ, FD_READ | FD_CLOSE )) > 0)
{
wsprintf(szBuff, "%d (0x%x)");
SetDlgItemText(hDialog, IDC_STATUS, szBuff);
closesocket( sock );
} return 1;
}
#include "resource.h"
#include "Server.h"HWND hDialog=0;
HINSTANCE hInst;
char szBuff[ 80 ];
SOCKET sock;
int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{ hDialog = CreateDialog(hInstance,
MAKEINTRESOURCE (IDD_DEMO),
0,
DialogProc);//创建对话框
if (!hDialog)//创建不成功
{
char buf[100];
wsprintf (buf,"Error x%x", GetLastError());
MessageBox(0,buf,"CreateDialog",MB_ICONEXCLAMATION | MB_OK);
return 1;
} MSG msg;
int status;
hInst = hInstance;
//消息循环
//If message other than WM_QUIT, the return value is nonzero.
//If the WM_QUIT message, the return value is 0.
//If there is an error, the return value is -1.
while ((status=GetMessage(&msg,0,0,0))!=0)
{
if (status==-1)
return -1;
//whether a message is intended for the specified dialog box,
//and if it is, processes the message to the Dialog procedure.
//else ,process the message as usual.
if (!IsDialogMessage(hDialog,&msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
return msg.wParam;
} //4 dialog procedure
BOOL CALLBACK DialogProc(HWND hDlg,
UINT message,
WPARAM wParam,
LPARAM lParam)//窗口过程,用来处理消息
{
switch (message)
{
// inite dialog
case WM_INITDIALOG://初始对话框的消息
{
int status;
WSADATA WSAData;
char szTemp[80];
if ((status = WSAStartup(MAKEWORD(1,1), &WSAData)) == 0)
{
MessageBox( hDlg, WSAData.szDescription, WSAData.szSystemStatus, MB_OK);
}
else
{
sprintf(szTemp, "%d is the err", status);
MessageBox( hDlg, szTemp, "Error", MB_OK);
}
}
break;
//close the dialog
case WM_CLOSE://关闭
DestroyWindow(hDlg); //send WM_DESTROY
break;
//destroy the window
case WM_DESTROY:
PostQuitMessage(0); //send WM_QUIT,then GetMessage is broken
break;
case WM_COMMAND://命令
switch (GET_WM_COMMAND_ID(wParam,lParam))
{
case IDCANCEL://取消按钮
EndDialog(hDlg,TRUE);
DestroyWindow(hDlg); //send WM_QUIT,then GetMessage is broken
break;
case IDOK://确定按钮
char szText[128],buf[256];
GetDlgItemText(hDlg,IDC_TXT,szText,sizeof(szText));
wsprintf(buf,"Hello! you click OK.\n\n text is:%s",szText);
MessageBox(hDlg,buf,"Dialog test",0);
break; case IDC_BUTTON1://按钮1
StartUp();
break; case ID_SEND://发送按钮
GetDlgItemText( hDlg, IDC_SENDM, szBuff, 80);
send(sock, szBuff, strlen(szBuff), NO_FLAGS_SET );//发送数据 }
break; case WSA_READ://读取数据
{
int status;
char szTemp[ MY_MSG_LENGTH ]; if (WSAGETSELECTEVENT(lParam) == FD_READ)
{
status = recv((SOCKET)wParam, szTemp, MY_MSG_LENGTH, NO_FLAGS_SET );
if (status)
{
szTemp[ status ] = '\0';
SetDlgItemText(hDlg, IDC_RESV, szTemp);
}
else
MessageBox( hDlg, "Connection broken", "Error", MB_OK);
}
} default:
return FALSE;
}
return TRUE;
} int StartUp(void)//初始Socket
{
//SOCKET sock;
SOCKADDR_IN local_sin;
u_short portno;
int acc_sin_len;
SOCKADDR_IN acc_sin;
int status; sock = socket( AF_INET, SOCK_STREAM, 0);
if (sock == INVALID_SOCKET)
{
SetDlgItemText(hDialog, IDC_STATUS, "socket()出错");
closesocket(sock);
return 0;
} local_sin.sin_family = AF_INET;
local_sin.sin_addr.s_addr = INADDR_ANY; GetDlgItemText( hDialog, IDC_PORT, szBuff, 80);
portno = atoi(szBuff);
local_sin.sin_port = htons(portno); SetWindowText( hDialog, "等待连接...");
SetDlgItemText(hDialog, IDC_STATUS, "监听状态"); if(bind( sock, (struct sockaddr FAR *) &local_sin, sizeof(local_sin)) == SOCKET_ERROR)//绑定
{
sprintf(szBuff, "%d 出错", WSAGetLastError());
SetDlgItemText(hDialog, IDC_STATUS, szBuff);
return 0;
} if(listen( sock, MAX_PENDING_CONNECTS ) < 0)
{
sprintf(szBuff, "%d 出错", WSAGetLastError());
SetDlgItemText(hDialog, IDC_STATUS, szBuff);
return 0;
} acc_sin_len = sizeof(acc_sin); sock = accept( sock,(struct sockaddr FAR *) &acc_sin,
(int FAR *) &acc_sin_len );
if (sock < 0)
{
sprintf(szBuff, "%d 出错", WSAGetLastError());
SetDlgItemText(hDialog, IDC_STATUS, szBuff);
return 0;
} SetDlgItemText(hDialog, IDC_STATUS, "建立一个连接");
EnableWindow( GetDlgItem( hDialog, IDC_PORT ), FALSE ); if ((status = WSAAsyncSelect( sock, hDialog, WSA_READ, FD_READ | FD_CLOSE )) > 0)
{
wsprintf(szBuff, "%d (0x%x)");
SetDlgItemText(hDialog, IDC_STATUS, szBuff);
closesocket( sock );
} return 1;
}
//基本上这样,没时间细看
#include "resource.h"
#include "Server.h"HWND hDialog=0;
HINSTANCE hInst;
char szBuff[ 80 ];
SOCKET sock;int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
//创建一个对话框(指定对话框资源--IDD_DEMO,指定对话框的消息处理过程DialogProc)
hDialog = CreateDialog(hInstance, MAKEINTRESOURCE (IDD_DEMO), 0, DialogProc);
//如果创建对话框失败则显示错误信息
if (!hDialog)
{
char buf[100];
//使用GetLastError()函数获取错误信息
wsprintf (buf,"Error x%x", GetLastError());
//显示错误信息
MessageBox(0,buf,"CreateDialog",MB_ICONEXCLAMATION | MB_OK);
return 1;
} MSG msg;
int status;
hInst = hInstance;
//消息循环
//如果收到的消息不是WM_QUIT则反复执行
while ((status=GetMessage(&msg,0,0,0))!=0)
{
if (status==-1)//如果有错误则退出
return -1;
//判断如果是你创建的对话框的消息则将其交给DialogProc()函数处理
if (!IsDialogMessage(hDialog,&msg))
{
TranslateMessage(&msg);//作一些转换
DispatchMessage(&msg);//发送给DialogProc()处理
}
}
return msg.wParam;
} //这是一个处理对话框消息的函数
BOOL CALLBACK DialogProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
//分类处理消息
switch (message)
{
//这个消息是初始化对话框的消息,当对话框刚刚被创建好时发生
case WM_INITDIALOG:
{
int status;
WSADATA WSAData;
char szTemp[80];
//初始化socket,要使用socket必须作这个准备工作
/*
使用socket的第一步
*/
if ((status = WSAStartup(MAKEWORD(1,1), &WSAData)) == 0)
{
//如果初始化失败则显示错误信息
MessageBox( hDlg, WSAData.szDescription, WSAData.szSystemStatus, MB_OK);
}
else
{
//初始化成功则显示成功信息
sprintf(szTemp, "%d is the err", status);
MessageBox( hDlg, szTemp, "Error", MB_OK);
}
}
break;
//处理关闭对话框消息
case WM_CLOSE:
DestroyWindow(hDlg); //发送WM_DESTROY消息
break;
//关闭窗口
case WM_DESTROY:
PostQuitMessage(0); //这个函数发送WM_QUIT消息到消息循环,然后整个程序退出
break;
//处理WM_COMMAND消息
case WM_COMMAND:
switch (GET_WM_COMMAND_ID(wParam,lParam))
{
//如果用户点了退出按钮或按了esc键则退出程序
case IDCANCEL:
EndDialog(hDlg,TRUE);
DestroyWindow(hDlg); //send WM_QUIT,then GetMessage is broken
break;
//当点了确定键
case IDOK:
char szText[128],buf[256];
GetDlgItemText(hDlg,IDC_TXT,szText,sizeof(szText));
wsprintf(buf,"Hello! you click OK.\n\n text is:%s",szText);
MessageBox(hDlg,buf,"Dialog test",0);
break; //点了IDC_BUTTON1键
case IDC_BUTTON1:
StartUp();
break; //点了ID_SEND键
case ID_SEND:
GetDlgItemText( hDlg, IDC_SENDM, szBuff, 80);//获取要发送的信息
send(sock, szBuff, strlen(szBuff), NO_FLAGS_SET );//使用SOCKET发送信息 }
break; //
case WSA_READ:
{
int status;
char szTemp[ MY_MSG_LENGTH ]; if (WSAGETSELECTEVENT(lParam) == FD_READ)//判断是否是读消息
{
status = recv((SOCKET)wParam, szTemp, MY_MSG_LENGTH, NO_FLAGS_SET );//接受消息
if (status)
{
szTemp[ status ] = '\0';
SetDlgItemText(hDlg, IDC_RESV, szTemp);
}
else
MessageBox( hDlg, "Connection broken", "Error", MB_OK);
}
} default:
return FALSE;
}
return TRUE;
} //自定义函数处理SOCKET信息
int StartUp(void)
{
//SOCKET sock;
SOCKADDR_IN local_sin;
u_short portno;
int acc_sin_len;
SOCKADDR_IN acc_sin;
int status; //创建SOCKET
/*
使用socket的第二步
*/
sock = socket( AF_INET, SOCK_STREAM, 0);
//如果创建失败则显示错误信息
if (sock == INVALID_SOCKET)
{
SetDlgItemText(hDialog, IDC_STATUS, "socket()出错");
closesocket(sock);
return 0;
} local_sin.sin_family = AF_INET;
local_sin.sin_addr.s_addr = INADDR_ANY; GetDlgItemText( hDialog, IDC_PORT, szBuff, 80);
portno = atoi(szBuff);
local_sin.sin_port = htons(portno);//使用的端口 SetWindowText( hDialog, "等待连接...");
SetDlgItemText(hDialog, IDC_STATUS, "监听状态"); //绑定SOCKET
/*
使用socket的第三步
*/
if(bind( sock, (struct sockaddr FAR *) &local_sin, sizeof(local_sin)) == SOCKET_ERROR)
{
sprintf(szBuff, "%d 出错", WSAGetLastError());
SetDlgItemText(hDialog, IDC_STATUS, szBuff);
return 0;
} //开始监听端口
if(listen( sock, MAX_PENDING_CONNECTS ) < 0)
{
sprintf(szBuff, "%d 出错", WSAGetLastError());
SetDlgItemText(hDialog, IDC_STATUS, szBuff);
return 0;
} acc_sin_len = sizeof(acc_sin); //接收socket数据
sock = accept( sock,(struct sockaddr FAR *) &acc_sin,
(int FAR *) &acc_sin_len );
if (sock < 0)
{
sprintf(szBuff, "%d 出错", WSAGetLastError());
SetDlgItemText(hDialog, IDC_STATUS, szBuff);
return 0;
} SetDlgItemText(hDialog, IDC_STATUS, "建立一个连接");
EnableWindow( GetDlgItem( hDialog, IDC_PORT ), FALSE ); if ((status = WSAAsyncSelect( sock, hDialog, WSA_READ, FD_READ | FD_CLOSE )) > 0)
{
wsprintf(szBuff, "%d (0x%x)");
SetDlgItemText(hDialog, IDC_STATUS, szBuff);
closesocket( sock );//关闭socket
} //接受完毕返回
return 1;}