本帖最后由 u012411894 于 2014-10-27 17:44:38 编辑

解决方案 »

  1.   

    客户端:
    #include "StdAfx.h"
    #include "ProxyC.h"
    #include <process.h>
    #include <winsock2.h>
    #include <afx.h>
    #pragma  comment(lib,"ws2_32.lib")CProxyC* pThis=NULL;
    CProxyC::CProxyC(void)
    {
       WSADATA wasData;
       WSAStartup(MAKEWORD(2,2),&wasData);
       this->m_pWndView=NULL;
       this->socketManager=SOCKET_ERROR;
       pThis=this;
    }CProxyC::~CProxyC(void)
    {
       WSACleanup();
    }VOID CProxyC::OnPostNotif(TCHAR* opNotif)
    {
    if(this->m_pWndView!=NULL)
    {
    this->m_pWndView->SendMessage(NOTIF_MSG_SHOW,(WPARAM)opNotif);
    }
    }
    BOOL CProxyC::OnStartClientListen(UINT nPort)
    {
    HANDLE hServer =  (HANDLE)_beginthreadex( NULL,
                        NULL, 
                        this->ClientListenProc,
                        (LPVOID)nPort, 
                         NULL, 
                         NULL
                     );
    if(NULL == hServer)
    {
    return FALSE;
    }
    return TRUE;
    }
    unsigned WINAPI CProxyC::ClientListenProc(LPVOID lpVoid)
    {
        pThis->socketManager=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
        if(SOCKET_ERROR==pThis->socketManager)
       {
           pThis->OnPostNotif(_T("连接失败!"));
           return 1;
        }
        struct sockaddr_in srvaddr;
        srvaddr.sin_family=AF_INET;
        srvaddr.sin_port=htons((UINT)lpVoid);
        srvaddr.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");//本地回路地址
    int nSrvaddrlen= sizeof(srvaddr);
    int i=connect(pThis->socketManager,(struct sockaddr*)&srvaddr,nSrvaddrlen);
        if( i == SOCKET_ERROR)
    {
    pThis->OnPostNotif(_T("Client socket connect error!"));
    closesocket(pThis->socketManager);
    }
    pThis->OnPostNotif(_T("Client socket connect OK!"));
    char bufSend[MAXBUFSIZE];
    char bufRecv[MAXBUFSIZE];
    int nsendlen;
    memset(bufSend,0,MAXBUFSIZE);
        memset(bufRecv,0,MAXBUFSIZE);
    strcpy_s(bufSend,MAXBUFSIZE,inet_ntoa(srvaddr.sin_addr));
    nsendlen=send(pThis->socketManager,bufSend,strlen(bufSend),0);
        if(0>=nsendlen)
    {
    return 1;
    }
    //r=recv(ServerProxy,bufRecv,MAXBUFSIZE,0);
        return 0;    
    }
      

  2.   

    10054  一般是socket被关闭了
    看不出什么东西, 具体的去调试
      

  3.   

    常见的原因是:服务器的并发连接数超过了其承载量,服务器会将其中一些连接Down掉