本帖最后由 VisualEleven 于 2012-03-21 22:10:41 编辑

解决方案 »

  1.   

    还有我发现一个问题,我按下OK键。。程序卡住了,不知道为什么,TMD的,,直接卡住了,如果你一拖动的话就未映应了,
      

  2.   

    如果我把server这个程序关了,那么客户端就反映了,擦。。如果不关,两个都没反应,
      

  3.   

    我发现我把while(1)这个语句注释起来,不卡住了,
      

  4.   

    客户端:
    1.
    send(sendsocket,(char*)&a,3,0);
    send(sendsocket,(char*)&b,3,0);
    这两句改成一句:
    char sbuff[6];
    把a和b的值赋给sbuff;
    send(sendsocket,sbuff,6,0);
    2.
    if(!(recv(sendsocket,recvBuf,8,0)))//改成接收8个字符,因为服务器最多发8个,你却收20个,所以卡住了.
        MessageBox(recvBuf);
        else
            MessageBox("没有接收到信息");
    服务器:
    if(recvBuf==mima)            send(clientsock,"接收正确",strlen("密码正确"),0);
            else             send(clientsock,"接收错误",strlen("错误"),0);
    先运行服务器,点服务器的OK(因为你是在OK按钮里写的侦听程序),再运行客户端
      

  5.   

    服务器:
    if(recvBuf==mima)  send(clientsock,"接收正确",8),0);
      else    send(clientsock,"接收错误",8,0);
      

  6.   


    好你是while()这个语句的问题,我把这个语句注释起来就不卡住了,
      

  7.   

    服务器的代码,不要在OK按钮里写,另个加个按钮里写.
    看服务器程序没发现什么问题,你说的卡是不是退不出来了.你看看这个网址的程序:
    http://blog.sina.com.cn/s/blog_7ce34d840100rfjy.html
      

  8.   

    你建立个线程,把OK函数的代码放在线程里,这样就不会卡了.建立线程不难:
    1.在头文件里定义:
    static UINT ReceiveThread(void *param);
    CWinThread* m_ThreadPtr;
    2.在CPP文件里的初始化函数:
    m_ThreadPtr=AfxBeginThread(ReceiveThread,this,THREAD_PRIORITY_HIGHEST); 
    3.在CPP文件里:
    UINT C八嘎Dlg::ReceiveThread(void *param)
    {
     WORD wVersionRequested;
        WSADATA wsaData;
        int err;
     
        wVersionRequested = MAKEWORD( 2, 2 );
     
        err = WSAStartup( wVersionRequested, &wsaData );
        if ( err != 0 ) {
            MessageBox("获取版本号失败");                                 
        }
              
        if ( LOBYTE( wsaData.wVersion ) != 2 ||
                HIBYTE( wsaData.wVersion ) != 2 ) {
          MessageBox("缺少库文件"); 
            WSACleanup( );
        }
        SOCKET listensocket=socket(AF_INET,SOCK_STREAM,0);   //定义一个socket
        SOCKADDR_IN addrSrv;
        addrSrv.sin_addr.S_un .S_addr =inet_addr("127.0.0.1");
        addrSrv.sin_family=AF_INET;
        addrSrv.sin_port =6000;
        bind(listensocket,(SOCKADDR *)&addrSrv,sizeof(SOCKADDR));  //绑定本机
        listen(listensocket,5); 
        char recvBuf[20];
        char mima[8]={'a','b','c','d','e','f'};
        
        while(1)
        {
            SOCKET clientsock=accept(clientsock,(sockaddr *)&clientaddr,&len);
            recv(clientsock,recvBuf,6,0);
            if(recvBuf==mima)            send(clientsock,"密码正确",strlen("密码正确"),0);
            else             send(clientsock,"错误",strlen("错误"),0);
        }}
      

  9.   

    线程的定义好像不是这个函数吧,我看孙鑫老师的教程上说的,CreateThread
      

  10.   


    好吧,我拿你的代码去,还是有问题,ReceiveThread' : local function definitions are illegal
      

  11.   

    class C八嘎Dlg : public CDialogEx/*CDialogEx*/
    {
    // 构造
    public:
    C八嘎Dlg(CWnd* pParent = NULL); // 标准构造函数          static UINT ReceiveThread(void *param);
    CRITICAL_SECTION m_Section;
    CWinThread* m_ThreadPtr;
    .....
    }//这是在头文件里定义
    //CPP文件:
    UINT C八嘎Dlg::ReceiveThread(void *param)
    {
    C八嘎Dlg *dlg=(C八嘎Dlg*)param;
    CListBox *box=(CListBox *)dlg->GetDlgItem(IDC_LIST_INFO);
            .....//加上你的代码
    }
    BOOL C八嘎Dlg::OnInitDialog()
    {
    CDialogEx/*CDialogEx*/::OnInitDialog(); // 将“关于...”菜单项添加到系统菜单中。
    AfxOleInit();
    // 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); // 设置小图标
             m_ThreadPtr=AfxBeginThread(ReceiveThread,this,THREAD_PRIORITY_HIGHEST);  //启动接受线程
    }
    这么应该没问题了.
    另外,AfxBeginThread是MFC里的,你说的那个CreateThread也对
      

  12.   

    "C八嘎Dlg",这是个类名,一定要改成你的类名,这是我定义的类名,和你的肯定不一样的