首页 新闻 会员 周边

VC 2010 socket编程总报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 = AFX_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);  //创建套接字  //将网络中的事件关联到窗口的消息函数中  WSAAsyncSelect(m_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.GetBuffer(m_IP.GetLength()));  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 15:01
< >
分享
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册