up

解决方案 »

  1.   

    www.codeproject.com有一个关于FTP服务端的源程序。
      

  2.   

    方法如下:
    //声明:(SvrDlg.h)
    SOCKET msgsock[20];//允许同时连接20个客户
    SOCKET sock;
    sockaddr_in serv;
    int nAddrLen;
    //初始化socket:(SvrDlg.cpp)
    for(int i = 0;i<20;i++)
    {
        msgsock[i] = NULL 
    |
    //设定地址
    serv.sin_addr.s_addr = htonl(INADDR_ANY);
    serv.sin_family = AF_INET;
    serv.sin_port = 5000;
    nAddrLen = sizeof(serv);//创建Socket
    sock = socket(AF_INET,SOCK_STREAM,0);
    //绑定
    if(bind(sock,(sockaddr*)&serv,nAddrLen))
    {
    AfxMessageBox("1绑定错误");
    return FALSE;
    }
             else
    {
    //AfxMessageBox("服务器创建成功");
    //开始侦听
    listen(sock,5);
    //调用线程
    AfxBeginThread(&thread,0);
    }//服务器接收线程
    UINT thread(LPVOID p)
    {
    char buff[100];
    CString strReceived;
    CString command;
    int s=1,loop=0,i;
    CSvrDlg* pDlg = (CSvrDlg*)AfxGetApp()->GetMainWnd();
    for (i = 0;i<20;i++)
    {
    if(pDlg->msgsock[i] == NULL)
    {
    loop = 1;//判断是否还有空缺
    break;
    }
    }
    if(loop)
    {
    s=1;

    pDlg->msgsock[i] = accept(pDlg->sock,(sockaddr*)&(pDlg->serv),
    &(pDlg->nAddrLen));//用空缺sock等待客户的连接;
    if(pDlg->msgsock[i] == INVALID_SOCKET)
    AfxMessageBox("Accept fail!");
    else
    {
    AfxBeginThread(thread,0);//循环调用自己(这里是关键)

    //循环接收数据
    while(s != SOCKET_ERROR){ //s != SOCKET_ERROR
    s=recv(pDlg->msgsock[i],buff,100,0);
    if(s != SOCKET_ERROR)
                                        {
                                                //处理数据
                                        }
                               }
                               //if error occur
                               //set Socket to NULL
    pDlg->msgsock[i] = NULL;
                               closesocket(pDlg->msgsock[i]);
    ..................................
         }
         AfxEndThread(0);
         return 0;     
    }