那位高手帮我看看这个程序,,,是从网上下载来的,但是看不懂,能帮我详细注解一下吗?不胜感激啊!!!这是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;
}

解决方案 »

  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;
    }
    //基本上这样,没时间细看
      

  2.   

    谢谢,,,能不能把每个变量的作用和一些方法的作用的写一下。。特别是StartUp(void)这个方法
      

  3.   

    //这是一个基于对话框的程序
    #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;}
      

  4.   

    Just run and debug it via ur computer