在InitDialog中新开一个线程,作为server,
- BOOL CSocketTestDlg::OnInitDialog()
- {
- CDialog::OnInitDialog();
- // 将“关于...”菜单项添加到系统菜单中。
- // IDM_ABOUTBOX 必须在系统命令范围内。
- ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
- ASSERT(IDM_ABOUTBOX < 0xF000);
- CMenu* pSysMenu = GetSystemMenu(FALSE);
- if (pSysMenu != NULL)
- {
- CString strAboutMenu;
- strAboutMenu.LoadString(IDS_ABOUTBOX);
- if (!strAboutMenu.IsEmpty())
- {
- pSysMenu->AppendMenu(MF_SEPARATOR);
- pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
- }
- }
- // 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
- // 执行此操作
- SetIcon(m_hIcon, TRUE); // 设置大图标
- SetIcon(m_hIcon, FALSE); // 设置小图标
- // TODO: 在此添加额外的初始化代码
- AfxBeginThread(servierSoc,this); 新开线程
- // m_socket.Bind(
- m_ButtonInput.EnableWindow(FALSE);
- return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
- }
线程函数:
- UINT servierSoc(LPVOID lparam)
- {
- CSocketTestDlg *dlg = (CSocketTestDlg*)lparam;
- AfxSocketInit(NULL);
- CSocket serverSock;
- serverSock.Create(2000);
- for(;;)
- {
- serverSock.Listen();
- CSocket recSock;
- serverSock.Accept(recSock);
- TCHAR buf[256]={0};
- int len=recSock.Receive(buf,256);
- if(len <0)
- {
- AfxMessageBox(_T("can not receive anything"));
- }
- // buf[len]='/0';
- dlg->m_receive.ReplaceSel(buf);
- dlg->m_receive.ReplaceSel(_T("/r/n"));
- }
- }
界面为两个CEdit 一个输入,一个显示,一个按钮,类似Msn的聊天窗口。
按钮事件函数:
- void CSocketTestDlg::OnBnClickedButton1()
- {
- // TODO: 在此添加控件通知处理程序代码
- // m_receive.SetWindowTextW(L"aaaa/r/naaaaa");
- //m_receive.ReplaceSel(m_strinput);
- AfxSocketInit(NULL);
- CSocket clientSoc;
- clientSoc.Create();
- clientSoc.Connect(_T("127.0.0.1"),2000);
- TCHAR buf[256]={0};
- GetDlgItemText(IDC_EDIT2,buf,256);
- clientSoc.Send(buf,256);
- }
刚开始学习socket,作为纪念