本帖最后由 VisualEleven 于 2011-08-07 19:21:15 编辑

解决方案 »

  1.   

    用一个SOCKET接收,然后OnAccept以后再转发给不同的线程等处理
      

  2.   

    其实一个socket就可以了,接收到数据以后解析一下,判断是聊天数据还是发送文件,然后交个不同的线程去处理不就好了。
    怎么不用winsock API去写?
      

  3.   

    我是新手啊,不会用winsock API,如果用一个SOCKET的话,怎么调用多个线程?有什么参考的CODE吗?
      

  4.   

    我改变了下策略,客户端在文件传输的开头加上"&&&&&&&&"作为文件传输标志,服务端接收后判断,以区分聊天的数据,不过仍然不成功,感觉是字符串比较的原因,请帮忙看看
    相关代码:
    //客户端
    void CChatClientDlg::OnBUTTONTransfer() 
    {       CString sFlagTransferBegin="&&&&&&&&";//传输开始标志
    m_ClientSocket.Send(sFlagTransferEnd,8)//发送至服务端
             ………………//文件传输部分,略
    }
    //服务端
    void CServerSocket::OnReceive(int nErrorCode)
    { char szTemp[1024];//接收文件和聊天消息的公用缓存文件
    int n=Receive(szTemp,1024);
    szTemp[n]='\0';
    char Check[]="&&&&&&&&";
    //判断接收到的消息是否为文件开始标志
            if(n==8)
    {
    if(strcmp(Check,szTemp)
    AfxMessageBox("Check passed!");
                            ……………………//传送文件
    }
    else//判断为聊天信息
    {……………………}//处理聊天消息
      

  5.   

    不好意思,有个地方写错了,倒数第六行应该是if(strcmp(Check,szTemp)==0)