首页 新闻 会员 周边 捐助

VC2010总报kernel32.dll冲突,请帮忙看看,多谢!

0
[待解决问题]

L19_1为客户端:

// L19_1.h : PROJECT_NAME 应用程序的主头文件 //

#pragma once

#ifndef __AFXWIN_H__  #error "在包含此文件之前包含“stdafx.h”以生成 PCH 文件" #endif

#include "resource.h"  // 主符号

// CL19_1App: // 有关此类的实现,请参阅 L19_1.cpp //

class CL19_1App : public CWinApp

{

  public:  CL19_1App();

  // 重写

public:  

  virtual BOOL InitInstance();

// 实现

  DECLARE_MESSAGE_MAP()  

  virtual int ExitInstance();

};

extern CL19_1App theApp;

 

// L19_1.cpp : 定义应用程序的类行为。 //

#include "stdafx.h"

#include "L19_1.h"

#include "L19_1Dlg.h"

#ifdef _DEBUG

#define new DEBUG_NEW

#endif

// CL19_1App

BEGIN_MESSAGE_MAP(CL19_1App, CWinApp)  

  ON_COMMAND(ID_HELP, &CWinApp::OnHelp)

END_MESSAGE_MAP()

// CL19_1App 构造

CL19_1App::CL19_1App()

{  

  // 支持重新启动管理器  

m_dwRestartManagerSupportFlags = FX_RESTART_MANAGER_SUPPORT_RESTART;

   // TODO: 在此处添加构造代码,  

  // 将所有重要的初始化放置在 InitInstance 中

}

// 唯一的一个 CL19_1App 对象

CL19_1App theApp;

// CL19_1App 初始化

BOOL CL19_1App::InitInstance()

{  

  // 如果一个运行在 Windows XP 上的应用程序清单指定要

  //使用 ComCtl32.dll 版本 6 或更高版本来启用可视化方式, 

  //则需要 InitCommonControlsEx()。否则,将无法创建窗口。   

  INITCOMMONCONTROLSEX InitCtrls;

  InitCtrls.dwSize = sizeof(InitCtrls);  

  // 将它设置为包括所有要在应用程序中使用的 

  // 公共控件类。  

  InitCtrls.dwICC = ICC_WIN95_CLASSES;

  InitCommonControlsEx(&InitCtrls);

  CWinApp::InitInstance();

  AfxEnableControlContainer();

  // 创建 shell 管理器,以防对话框包含  

  // 任何 shell 树视图控件或 shell 列表视图控件。  

  CShellManager *pShellManager = new CShellManager;  

  // 标准初始化  

  // 如果未使用这些功能并希望减小  

  // 最终可执行文件的大小,则应移除下列  

  // 不需要的特定初始化例程  

  // 更改用于存储设置的注册表项  

  // TODO: 应适当修改该字符串,  

  // 例如修改为公司或组织名  

  SetRegistryKey("应用程序向导生成的本地应用程序");      ////////////////////////////////////////////////////////  

  WSADATA wsd;      //定义WSADATA对象  

  WSAStartup(MAKEWORD(2,2),&wsd);  //初始化套接字

  /////////////////////////////////////////////////////////  

  CL19_1Dlg dlg;  

  m_pMainWnd = &dlg;  

  INT_PTR nResponse = dlg.DoModal();  

  if (nResponse == IDOK)  

  {   

    // TODO: 在此放置处理何时用   

    //  “确定”来关闭对话框的代码  

  }  

  else if (nResponse == IDCANCEL)  

  {   

  // TODO: 在此放置处理何时用   

  //  “取消”来关闭对话框的代码  

  }

   // 删除上面创建的 shell 管理器。  

  if (pShellManager != NULL)  

  {   

    delete pShellManager;  

  }

   // 由于对话框已关闭,所以将返回 FALSE 以便退出应用程序,  

  //  而不是启动应用程序的消息泵。  

  return FALSE;

}

 

int CL19_1App::ExitInstance()

{  

  // TODO: 在此添加专用代码和/或调用基类  

  WSACleanup();   //释放套接字  

  return CWinApp::ExitInstance();

}

 

// L19_1Dlg.h : 头文件 //

#pragma once

#include "resource.h"

#include "afxwin.h"

#include "winsock2.h"    //引用文件头

#pragma comment(lib,"ws2_32.lib") //链接库文件

#define CM_RECEIVE 1000

// CL19_1Dlg 对话框 class CL19_1Dlg : public CDialogEx

{

// 构造

public:  

  CL19_1Dlg(CWnd* pParent = NULL); // 标准构造函数

// 对话框数据  

  enum { IDD = IDD_L19_1_DIALOG };

 protected:  

  virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持

// 实现

  protected:  HICON m_hIcon;

 // 生成的消息映射函数  

  virtual BOOL OnInitDialog();  

  afx_msg void OnSysCommand(UINT nID, LPARAM lParam);  

  afx_msg void OnPaint();  

  afx_msg HCURSOR OnQueryDragIcon();  

  DECLARE_MESSAGE_MAP()

public:  

  CEdit m_ServerIP;  

  CEdit m_ServerPort;  

  CEdit m_NickName;  

  CEdit m_login;  

  CEdit m_SendData;  

  CListBox m_MsgList;  

  SOCKET  m_SockClient;  //定义套接字  

  UINT  m_Port;    //定义端口  

  CString m_IP;     //定义IP  

  int m_loginflag;  

  void ReceiveInfo();  

  virtual BOOL PreTranslateMessage(MSG* pMsg);  

  afx_msg void OnBnClickedLogin();  

  afx_msg void OnBnClickedSend();

};

 

// L19_1Dlg.cpp : 实现文件 //

#include "stdafx.h"

#include "L19_1.h"

#include "L19_1Dlg.h"

#include "afxdialogex.h"

#ifdef _DEBUG

#define new DEBUG_NEW

#undef THIS_FILE static char THIS_FILE[] = __FILE__;

#endif

// 用于应用程序“关于”菜单项的 CAboutDlg 对话框

class CAboutDlg : public CDialogEx

{

public:  

  CAboutDlg();

// 对话框数据  

  enum { IDD = IDD_ABOUTBOX };

 protected:

   virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持

// 实现

protected:  

  DECLARE_MESSAGE_MAP()

public:

  virtual BOOL PreTranslateMessage(MSG* pMsg);

};

CAboutDlg::CAboutDlg() : CDialogEx(CAboutDlg::IDD)

{

}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)

{  

  CDialogEx::DoDataExchange(pDX);

}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx) END_MESSAGE_MAP()

// CL19_1Dlg 对话框

CL19_1Dlg::CL19_1Dlg(CWnd* pParent /*=NULL*/)  : CDialogEx(CL19_1Dlg::IDD, pParent)  , m_loginflag(0)

{  

  m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);

}

void CL19_1Dlg::DoDataExchange(CDataExchange* pDX)

{  

  CDialogEx::DoDataExchange(pDX);  

    DDX_Control(pDX, IDC_EDIT1, m_ServerIP);  

    DDX_Control(pDX, IDC_EDIT2, m_ServerPort);  

    DDX_Control(pDX, IDC_EDIT3, m_NickName);  

    DDX_Control(pDX, IDC_EDIT4, m_login);  

    DDX_Control(pDX, IDC_EDIT5, m_SendData);  

    DDX_Control(pDX, IDC_LIST1, m_MsgList);

}

BEGIN_MESSAGE_MAP(CL19_1Dlg, CDialogEx)  

    ON_WM_SYSCOMMAND()  

    ON_WM_PAINT()  

    ON_WM_QUERYDRAGICON()  

    ON_BN_CLICKED(IDC_Login, &CL19_1Dlg::OnBnClickedLogin)  

    ON_BN_CLICKED(IDC_Send, &CL19_1Dlg::OnBnClickedSend)

END_MESSAGE_MAP()

// CL19_1Dlg 消息处理程序

BOOL CL19_1Dlg::OnInitDialog()

{  

  CDialogEx::OnInitDialog();

   // 将“关于...”菜单项添加到系统菜单中。

   // IDM_ABOUTBOX 必须在系统命令范围内。  

  ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);  

  ASSERT(IDM_ABOUTBOX < 0xF000);

   CMenu* pSysMenu = GetSystemMenu(FALSE);  

if (pSysMenu != NULL)  

{   

  BOOL bNameValid;   

  CString strAboutMenu;   

  bNameValid =   strAboutMenu.LoadString(IDS_ABOUTBOX);   

  ASSERT(bNameValid);   

  if (!strAboutMenu.IsEmpty())   

  {    

    pSysMenu->AppendMenu(MF_SEPARATOR);    

    pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);

   }  

}

   // 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动  

  //  执行此操作  

  SetIcon(m_hIcon, TRUE);   // 设置大图标  

  SetIcon(m_hIcon, FALSE);  // 设置小图标

   // TODO: 在此添加额外的初始化代码  

  m_SockClient = socket(AF_INET,SOCK_STREAM,0);  //创建套接字  

  m_ServerIP.SetWindowText("169.254.238.79");  

  m_ServerPort.SetWindowText("5000");  

  m_login.SetWindowText("请登录");  

  m_loginflag=0;

   return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE

}

void CL19_1Dlg::OnSysCommand(UINT nID, LPARAM lParam)

{  

  if ((nID & 0xFFF0) == IDM_ABOUTBOX)  

{   

  CAboutDlg dlgAbout;

  dlgAbout.DoModal();

 }  

else

{   

  CDialogEx::OnSysCommand(nID, lParam);  

}

}

  // 如果向对话框添加最小化按钮,则需要下面的代码

  //  来绘制该图标。对于使用文档/视图模型的 MFC 应用程序,

  //  这将由框架自动完成。

void CL19_1Dlg::OnPaint()

{

   if (IsIconic())

   {   

    CPaintDC dc(this); // 用于绘制的设备上下文

     SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);

     // 使图标在工作区矩形中居中   

    int cxIcon = GetSystemMetrics(SM_CXICON);   

    int cyIcon = GetSystemMetrics(SM_CYICON);   

    CRect rect;   GetClientRect(&rect);   

    int x = (rect.Width() - cxIcon + 1) / 2;  

     int y = (rect.Height() - cyIcon + 1) / 2;

    // 绘制图标   

  dc.DrawIcon(x, y, m_hIcon);  

  }  

  else  

  {   

    CDialogEx::OnPaint();  

  }

}

  //当用户拖动最小化窗口时系统调用此函数取得光标

  //显示。

HCURSOR CL19_1Dlg::OnQueryDragIcon()

{  

  return static_cast<HCURSOR>(m_hIcon);

}

 

void CL19_1Dlg::ReceiveInfo()

{  

  char buffer[256];                  //定义数据缓冲区  

  int num = recv(m_SockClient,buffer,256,0); //接收数据  

  buffer[num] = 0;                  //定义结束标记  

  m_MsgList.AddString(buffer);          //读取数据到列表中  

  delete buffer;

}

BOOL CL19_1Dlg::PreTranslateMessage(MSG* pMsg)

{  

  // TODO: 在此添加专用代码和/或调用基类  

  if(pMsg->message==1000)  

  {   

    ReceiveInfo();     //触发函数   

    return TRUE;  

  }  

  else  

  {   

    return CDialogEx::PreTranslateMessage(pMsg);  

  }

}

void CL19_1Dlg::OnBnClickedLogin()

{  

  if(m_loginflag==0)  

  {  

    sockaddr_in serveraddr;     //服务器端地址  

    CString strport;      //定义字符串记录端口  

    m_ServerPort.GetWindowText(strport); //获取端口字符串      

    m_ServerIP.GetWindowText(m_IP);   //获取IP

    if (strport.IsEmpty() || m_IP.IsEmpty())//判断端口和IP是否为空  

    {   

    MessageBox("请设置服务器IP和端口号");//弹出提示对话框   

    return;  

  }  

  m_Port =atoi(strport);     //将端口字符串转换为整数  

  serveraddr.sin_family = AF_INET;  //设置服务器地址家族  

  serveraddr.sin_port = htons(m_Port); //设置服务器端口号  

  serveraddr.sin_addr.S_un.S_addr = inet_addr(m_IP.GetBuffer(m_IP.GetLength())); //设置服务器IP  

  if (connect(m_SockClient,(sockaddr*)&serveraddr,sizeof(serveraddr))!=0)   //开始连接服务器  

  {   

    MessageBox("连接失败");    //弹出提示对话框   

    return;  

  }   

  else  

  {   

    MessageBox("连接成功");       //弹出提示对话框   

    m_login.SetWindowText("连接成功");    //显示连接状态    

    m_loginflag=1;         //设置已连接标志  

  }  

  WSAAsyncSelect(m_SockClient,m_hWnd,1000,FD_READ); //设置异步模型  

  CString strname,info ;        //定义字符串变量  

  m_NickName.GetWindowText(strname);     //获取昵称  

  info.Format("%s-->%s",strname,"进入聊天室");  //设置发送信息  

  send(m_SockClient,info.GetBuffer(0),info.GetLength(),0);//向服务器发送数据  }

}

 

void CL19_1Dlg::OnBnClickedSend()

{  

  CString strData,name,info ;           //定义字符串变量  

  m_NickName.GetWindowText(name);     //获取昵称

   m_SendData.GetWindowText(strData);   //获取发送数据  

if (!name.IsEmpty() && !strData.IsEmpty()) //判断字符串是否为空  

{               

   info.Format("%s说: %s",name,strData); //格式化发送的数据   

  send(m_SockClient,info.GetBuffer(0),info.GetLength(),0);//开始发送数据  

  m_MsgList.AddString(info);    //向列表中添加数据   

  m_SendData.SetWindowText("");   //清空编辑框文本  } 

}

========================

L19_2为服务器

// L19_2.h : PROJECT_NAME 应用程序的主头文件 //

#pragma once

#ifndef __AFXWIN_H__  #error "在包含此文件之前包含“stdafx.h”以生成 PCH 文件" #endif

#include "resource.h"  // 主符号

// CL19_2App: // 有关此类的实现,请参阅 L19_2.cpp //

class CL19_2App : public CWinApp

{

public:  

  CL19_2App();

// 重写

public:  

  virtual BOOL InitInstance();

// 实现

   DECLARE_MESSAGE_MAP()  virtual int ExitInstance();

};

extern CL19_2App theApp;

 

// L19_2.cpp : 定义应用程序的类行为。 //

#include "stdafx.h"

#include "L19_2.h"

#include "L19_2Dlg.h"

#ifdef _DEBUG

#define new DEBUG_NEW

#endif

 

// CL19_2App

BEGIN_MESSAGE_MAP(CL19_2App, CWinApp)  ON_COMMAND(ID_HELP, &CWinApp::OnHelp) END_MESSAGE_MAP()

// CL19_2App 构造

CL19_2App::CL19_2App()

{  

// 支持重新启动管理器  

m_dwRestartManagerSupportFlags=AFX_RESTART_MANAGER_SUPPORT_RESTART;

 // TODO: 在此处添加构造代码,  

// 将所有重要的初始化放置在 InitInstance 中 }

// 唯一的一个 CL19_2App 对象

CL19_2App theApp;

// CL19_2App 初始化

BOOL CL19_2App::InitInstance()

{  

  //如果一个运行在 Windows XP 上的应用程序清单指定要  

  //使用 ComCtl32.dll 版本 6 或更高版本来启用可视化方式,  

  //则需要 InitCommonControlsEx()。否则,将无法创建窗口。

  INITCOMMONCONTROLSEX InitCtrls;  

  InitCtrls.dwSize = sizeof(InitCtrls);  

  // 将它设置为包括所有要在应用程序中使用的  

  // 公共控件类。  

  InitCtrls.dwICC = ICC_WIN95_CLASSES;  

  InitCommonControlsEx(&InitCtrls);

  CWinApp::InitInstance();

   AfxEnableControlContainer();  

  // 创建 shell 管理器,以防对话框包含  

  // 任何 shell 树视图控件或 shell 列表视图控件。  

  CShellManager *pShellManager = new CShellManager;

   // 标准初始化  

  // 如果未使用这些功能并希望减小  

  // 最终可执行文件的大小,则应移除下列  

  // 不需要的特定初始化例程  

  // 更改用于存储设置的注册表项  

  // TODO: 应适当修改该字符串,  

  // 例如修改为公司或组织名  

  SetRegistryKey(_T("应用程序向导生成的本地应用程序"));    ////////////////////////////////////////////////////////  

  WSADATA wsd;      //定义WSADATA对象  

  WSAStartup(MAKEWORD(2,2),&wsd);  //初始化套接字    /////////////////////////////////////////////////////////  

  CL19_2Dlg dlg;  

  m_pMainWnd = &dlg;  

  INT_PTR nResponse = dlg.DoModal();  

  if (nResponse == IDOK)  

  {   

  // TODO: 在此放置处理何时用   

  //  “确定”来关闭对话框的代码  

  }  

  else

  if (nResponse == IDCANCEL)  

  {   

    // TODO: 在此放置处理何时用   

    //  “取消”来关闭对话框的代码  

  }

      // 删除上面创建的 shell 管理器。  

  if (pShellManager != NULL)  

  {   

    delete pShellManager;  

  }

   // 由于对话框已关闭,所以将返回 FALSE 以便退出应用程序,  

  //  而不是启动应用程序的消息泵。  

  return FALSE;

}

 

int CL19_2App::ExitInstance()

{  

  // TODO: 在此添加专用代码和/或调用基类  

  WSACleanup();   //释放套接字  

  return CWinApp::ExitInstance();

}

 

// L19_2Dlg.h : 头文件 //

#pragma once

#include "afxwin.h"

#include "winsock2.h"    //引用头文件

#pragma comment (lib,"ws2_32.lib") //链接库文件

#define MAXNUM 10

 

// CL19_2Dlg 对话框

class CL19_2Dlg : public CDialogEx

{

// 构造

public:  

  CL19_2Dlg(CWnd* pParent = NULL); // 标准构造函数  

  SOCKET  m_SockServer,m_SockClient; //定义套接字  

  SOCKET m_Clients[MAXNUM];   //客户端套接字  

  int    m_ConnectNum;    //当前链接的客户数  

  CString m_IP;       //定义IP  

  UINT m_Port;      //定义端口

  // 对话框数据  

  enum { IDD = IDD_L19_2_DIALOG };

protected:  

  virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持

// 实现

protected:  

  HICON m_hIcon;

   // 生成的消息映射函数  

  virtual BOOL OnInitDialog();  

  afx_msg void OnSysCommand(UINT nID, LPARAM lParam);  

  afx_msg void OnPaint();  

  afx_msg HCURSOR OnQueryDragIcon();  

  DECLARE_MESSAGE_MAP()

public:  

  CEdit m_ServerIP;  

  CEdit m_ServerPort;  

  CEdit m_Set;

   int m_SetFlag;  

  void TranslateData(void);  

  virtual BOOL PreTranslateMessage(MSG* pMsg);  

  afx_msg void OnBnClickedButton1();

};

// L19_2Dlg.cpp : 实现文件 //

#include "stdafx.h"

#include "L19_2.h"

#include "L19_2Dlg.h"

#include "afxdialogex.h"

#ifdef _DEBUG

#define new DEBUG_NEW

#endif

 

// 用于应用程序“关于”菜单项的 CAboutDlg 对话框

class CAboutDlg : public CDialogEx

{

public:  

  CAboutDlg();

  // 对话框数据  

  enum { IDD = IDD_ABOUTBOX };

 protected:  

  virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持

// 实现

protected:  

  DECLARE_MESSAGE_MAP()

};

CAboutDlg::CAboutDlg() : CDialogEx(CAboutDlg::IDD)

{

}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)

{  

  CDialogEx::DoDataExchange(pDX);

}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx)

END_MESSAGE_MAP()

 

// CL19_2Dlg 对话框

CL19_2Dlg::CL19_2Dlg(CWnd* pParent /*=NULL*/)  : CDialogEx(CL19_2Dlg::IDD, pParent)  , m_SetFlag(0)

{

   m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);

}

void CL19_2Dlg::DoDataExchange(CDataExchange* pDX)

{  

  CDialogEx::DoDataExchange(pDX);  

  DDX_Control(pDX, IDC_EDIT1, m_ServerIP);  

  DDX_Control(pDX, IDC_EDIT2, m_ServerPort);  

  DDX_Control(pDX, IDC_EDIT3, m_Set);

}

BEGIN_MESSAGE_MAP(CL19_2Dlg, CDialogEx)  

  ON_WM_SYSCOMMAND()  

  ON_WM_PAINT()  

  ON_WM_QUERYDRAGICON()  

  ON_BN_CLICKED(IDC_BUTTON1, &CL19_2Dlg::OnBnClickedButton1) END_MESSAGE_MAP()

// CL19_2Dlg 消息处理程序

BOOL CL19_2Dlg::OnInitDialog()

{  

  CDialogEx::OnInitDialog();

   // 将“关于...”菜单项添加到系统菜单中。

   // IDM_ABOUTBOX 必须在系统命令范围内。  

  ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);  

  ASSERT(IDM_ABOUTBOX < 0xF000);

   CMenu* pSysMenu = GetSystemMenu(FALSE);  

  if (pSysMenu != NULL)  

  {   

    BOOL bNameValid;   

    CString strAboutMenu;   

    bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);   

    ASSERT(bNameValid);   

    if (!strAboutMenu.IsEmpty())   

    {    

      pSysMenu->AppendMenu(MF_SEPARATOR); 

      pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);   

    }  

  }

   // 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动  

  //  执行此操作  

  SetIcon(m_hIcon, TRUE);   // 设置大图标  

  SetIcon(m_hIcon, FALSE);  // 设置小图标

   // TODO: 在此添加额外的初始化代码    

  m_SockServer = socket(AF_INET,SOCK_STREAM,0);  //创建套接字  

  //将网络中的事件关联到窗口的消息函数中  

  WSAAsyncSelectm_SockServer,m_hWnd,WM_USER+1,FD_WRITE|FD_READ|FD_ACCEPT);    m_ConnectNum = 0;         //初始化客户端连接数量   

   for (int i = 0; i< MAXNUM;i++) m_Clients[i]= 0; //初始化客户端套接字

  m_ServerIP.SetWindowText("169.254.238.79");   //预设IP地址  

  m_ServerPort.SetWindowText("5000");     //预设端口号  

  m_Set.SetWindowText("请设置");      //提示状态  

  m_SetFlag=0;          //已设置标志  

  return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE

}

void CL19_2Dlg::OnSysCommand(UINT nID, LPARAM lParam)

{  

  if ((nID & 0xFFF0) == IDM_ABOUTBOX)  

  {   

    CAboutDlg dlgAbout;       

    dlgAbout.DoModal();  

  }  

  else  

  {   

    CDialogEx::OnSysCommand(nID, lParam);  

  }

}

// 如果向对话框添加最小化按钮,则需要下面的代码

//  来绘制该图标。对于使用文档/视图模型的 MFC 应用程序,

//  这将由框架自动完成。

void CL19_2Dlg::OnPaint()

{  

  if (IsIconic())  

  {   

    CPaintDC dc(this); // 用于绘制的设备上下文

     SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);

      // 使图标在工作区矩形中居中   

    int cxIcon = GetSystemMetrics(SM_CXICON);   

    int cyIcon = GetSystemMetrics(SM_CYICON);   

    CRect rect;   

    GetClientRect(&rect);   

    int x = (rect.Width() - cxIcon + 1) / 2;   

    int y = (rect.Height() - cyIcon + 1) / 2;

      // 绘制图标   

    dc.DrawIcon(x, y, m_hIcon);  

  }

  else  

  {   

    CDialogEx::OnPaint();  

  }

}

//当用户拖动最小化窗口时系统调用此函数取得光标

//显示。

HCURSOR CL19_2Dlg::OnQueryDragIcon()

{  

  return static_cast<HCURSOR>(m_hIcon);

}

 

void CL19_2Dlg::TranslateData(void)

{  

  sockaddr_in serveraddr;      //定义网络地址  

  char buffer[256];       //定义缓冲区  

  int len =sizeof(serveraddr);    //获取网络地址大小  

  int curlink = -1;       //定义客户端索引初值  

  int num = -1;        //定义客户端接收的数据数初值  

  for (int i = 0; i < MAXNUM; i++)   //遍历客户端套接字  

  {   

    num= recv(m_Clients[i],buffer,256,0); //接收客户端的数据   

    if (num != -1)       //判断哪个客户端向服务器发送数据   

    {    

      curlink = i;      //记录客户端索引    

      break;        //终止循环   

    }  

  }  

  buffer[num]= 0;        //设置数据结束标志  

  if (num == -1)        //接受客户端的连接  

  {   

    if (m_ConnectNum < MAXNUM)    //判断当前客户端连接是否大于上限  

    {    

      m_Clients[m_ConnectNum] =   //接受客户端的连接     

      accept(m_SockServer,(struct sockaddr*)&serveraddr,&len);

      m_ConnectNum++;      //将连接数量加1   

    }    

    return;  

  }  

  for(int j=0;j<m_ConnectNum;j++) send(m_Clients[j],buffer,num,0); 

  //将接收的数据发送给客户端,不向发送方本身发送数据    

  //if (j != curlink)

}

BOOL CL19_2Dlg::PreTranslateMessage(MSG* pMsg)

{  

  // TODO: 在此添加专用代码和/或调用基类  

  if(pMsg->message==WM_USER+1)  

  {   

    TranslateData();      //触发函数   

    return TRUE;  

  }  

  else  

    return CDialogEx::PreTranslateMessage(pMsg);

}

void CL19_2Dlg::OnBnClickedButton1()

{  

  // TODO: 在此添加控件通知处理程序代码

  if(m_SetFlag==0)  

  {  

    m_ServerIP.GetWindowText(m_IP);  

    CString strPort;  

    m_ServerPort.GetWindowText(strPort);  

    if (m_IP.IsEmpty() || strPort.IsEmpty())  

    {   

      MessageBox("请设置服务器IP和端口号","提示");   

      return;  

    }  

    m_Port = atoi((const char*)strPort.GetBuffer(strPort.GetLength()));  

    sockaddr_in serveraddr;  serveraddr.sin_family = AF_INET;

    serveraddr.sin_addr.S_un.S_addr=inet_addr(m_IP);  

    serveraddr.sin_port = htons(m_Port);  

    if (bind(m_SockServer,(sockaddr*)&serveraddr,sizeof(serveraddr)))  

    {   

      MessageBox("绑定地址失败.");     

      return;  

    }  

    else  

    {   

      MessageBox("绑定地址成功.");   

      m_Set.SetWindowText("设置成功");   

      m_SetFlag=1;  

    }  

    listen(m_SockServer,20);  

  }

}

Zh7091的主页 Zh7091 | 菜鸟二级 | 园豆:206
提问于:2013-06-16 16:21
< >
分享
所有回答(1)
0

建议你,先把要实现的功能描述出来,然后再把错误触发的情况描述出来,最好加上截图。

贴这么多代码,额。。。能花时间去推荐的人,真的不多。大家其实都比较忙。也都乐于助人。

前提是,时间成本也别太高了。。

二十三号同学 | 园豆:974 (小虾三级) | 2013-06-17 11:00
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册