在服务器和客户端之间建立两个socket连接,第一个连接能够成功建立,第二个连接返回错误10060,这是为什么呢??

解决方案 »

  1.   

    在服务器和客户端之间建立两个socket连接,第一个连接能够成功建立,第二个连接返回错误10060,这是为什么呢??== 第二次是指关闭程序重新运行,还是关闭了连接再连一次?如果是关闭连接再连出错的话,看看对端的SOCKET有没释放掉端口
      

  2.   

    都没有关闭连接   代码如下:
    服务端:
    第一个Socket:
    unsigned int StartMsg(LPVOID lParam)
    {
    // AfxMessageBox("startmsg start"); WORD wVersionRequested;
    WSADATA wsaData;
    int err; wVersionRequested = MAKEWORD(2, 0);
    err = WSAStartup( wVersionRequested, &wsaData );
    if ( err != 0 ) {                       
    return 1;
    } CRadasaveDlg *pDlg = (CRadasaveDlg *)lParam;
    SOCKET SocketMsg, ServerMsg;

    sockaddr_in ServerMsgaddr;
    memset(&ServerMsgaddr, 0, sizeof(ServerMsgaddr));

    SocketMsg = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    if (SocketMsg == INVALID_SOCKET) {
    char szError[256] = {0};
    DWORD ErrorCode = GetLastError();
    sprintf(szError, "Create failed: %s\n", ErrorCode);
    AfxMessageBox(szError);

    return 1;
    }

    sockaddr_in SocketMsgaddr;
    memset(&SocketMsgaddr,0,sizeof(SocketMsgaddr));

    SocketMsgaddr.sin_family = AF_INET;

    SocketMsgaddr.sin_addr.s_addr = htonl(INADDR_ANY);

    SocketMsgaddr.sin_port = htons((u_short)nPort2);

    if (bind(SocketMsg, (sockaddr *)&SocketMsgaddr, sizeof(SocketMsgaddr)) == SOCKET_ERROR) {
    char szError[256] = {0};
    sprintf(szError, "Bind Faild: %d", GetLastError());
    AfxMessageBox(szError);

    return 1;
    }

    if (listen(SocketMsg,1) == SOCKET_ERROR) {
    char szError[256] = {0};
    sprintf(szError, "Listen Faild: %d", GetLastError());
    AfxMessageBox(szError);

    return 1;
    }

    ServerMsg = accept(SocketMsg, (sockaddr *)&ServerMsgaddr, 0);
    if(ServerMsg == INVALID_SOCKET)
    {
    }
    else
    {
    while (1) {
    char szRecv[256] = {0};
    recv(ServerMsg, szRecv, 256, 0);//receive client command

    if (strcmp(szRecv, warmup) == 0) {
    // pDlg->OnBtcsh();
    }
    else if(strcmp(szRecv, stop) == 0){
    AfxMessageBox("Send over!");
    m_exit = true;
    }
    else if (strcmp(szRecv, sendmsg) == 0){
    AfxMessageBox("Send begin!");
    m_exit = false;
    }
    else if(strcmp(szRecv, pause) == 0){
    // pDlg->OnBtcsh();
    }
    else if (strcmp(szRecv, autoset) == 0) {
    //     pDlg->OnBttune();
    }
    } } return 0;
    }
    第二个Socket:
    unsigned int StartServer(LPVOID lParam)
    {
    WORD wVersionRequested;
    WSADATA wsaData;
    int err;

    wVersionRequested = MAKEWORD(2, 0);

    err = WSAStartup( wVersionRequested, &wsaData );
    if ( err != 0 ) {                       
    return 1;
    } m_exit = false;

    CRadasaveDlg *aDlg = (CRadasaveDlg *)lParam;

    //Socket----------------------------------------- SOCKET aSocket, ServerSocket; sockaddr_in serverSockaddr;
    memset(&serverSockaddr, 0, sizeof(serverSockaddr)); aSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    if (aSocket == INVALID_SOCKET) {
    char szError[256] = {0};
    DWORD ErrorCode = GetLastError();
    sprintf(szError, "Create failed: %s\n", ErrorCode);
    AfxMessageBox(szError);

    return 1;
    } sockaddr_in aSockaddr;
    memset(&aSockaddr,0,sizeof(aSockaddr));

    aSockaddr.sin_family = AF_INET;

    aSockaddr.sin_addr.s_addr = htonl(INADDR_ANY);

    aSockaddr.sin_port = htons((u_short)nPort);

    if (bind(aSocket, (sockaddr *)&aSockaddr, sizeof(aSockaddr)) == SOCKET_ERROR) {
    char szError[256] = {0};
    sprintf(szError, "Bind Faild: %d", GetLastError());
    AfxMessageBox(szError);

    return 1;
    } if (listen(aSocket,1) == SOCKET_ERROR) {
    char szError[256] = {0};
    sprintf(szError, "Listen Faild: %d", GetLastError());
    AfxMessageBox(szError);

    return 1;
    }
    aDlg->SendMessage(WM_MY_DATACONNECT);
    while(!m_exit)
    {

    ServerSocket = accept(aSocket, (sockaddr *)&serverSockaddr, 0);
    if(ServerSocket == INVALID_SOCKET)
    {
    continue;
    }
    else
    {
    char str[] = "";
    if (strcmp(buf,str) != 0) {
    send(ServerSocket,buf,2022,0);    //send data
    }
    else{
    continue;
    }
    }

    }
    return 0;
    }客户端:
    第一个Socket:
    AfxSocketInit();

    CString strIP = "169.254.1.28";

    if (!socketMsg.Create()) {
    char szMsg[1024] = {0};

    sprintf(szMsg, "create faild: %d", socketMsg.GetLastError());

    AfxMessageBox(szMsg);
    }
    int nPort2 = 7000;

    if(socketMsg.Connect(strIP,nPort2))
    {
    }
    else
    {
    char szMsg[1024] = {0};

    sprintf(szMsg, "connect faild: %d", socketMsg.GetLastError());

    AfxMessageBox(szMsg);
    }
    第二个Socket:
    unsigned int StartClient(LPVOID lParam)
    {
    CSocket aSocket;

    AfxSocketInit();
      
    CString strIP = "169.254.1.28"; CClientDlg* aDlg = (CClientDlg*)lParam; if(!aSocket.Create())
    {
    char szMsg[1024] = {0};

    sprintf(szMsg, "create faild: %d", aSocket.GetLastError());

    AfxMessageBox(szMsg);
    return 1;
    }

    int nPort = 6666;

    if(aSocket.Connect(strIP, nPort))
    {
    while(!m_exit){
    char buf[2022] = {0}; int RecValue = aSocket.Receive(buf, 2022);

    if (RecValue == 0) {
    AfxMessageBox("connect is close;");
    }
    else if (RecValue == SOCKET_ERROR) {
    char szMsg[1024] = {0};

    sprintf(szMsg, "Recv faild: %d", aSocket.GetLastError());

    AfxMessageBox(szMsg); return 1;
    }
    else{
    //将接收到的文件写到新建的文件中去
    Recefile.write(buf,2022);
    }
    }
    }
    else
    {
    char szMsg[1024] = {0};

    sprintf(szMsg, "connect faild: %d", aSocket.GetLastError());

    AfxMessageBox(szMsg);
    return 1;
    }
    return 0;
    }
      

  3.   

    你不会是server的两个socket都在主线程里面吧?
    得开线程监听
      

  4.   

    你不会是server的两个socket都在主线程里面吧? 
    得开线程监听
    -----------------------
    server的两个socket都是在线程里面开的,只有客户端是一个开在主线程,一个开在子线程里面。
      

  5.   

     应该是 
           while (1)
           {
              clientsockt =  accept();
              ....
           }
     你只 accept 一次,当然收不到第2次连接
      

  6.   

    楼上这位是说第二个服务器的socket的accept么,我试试,代码是嵌在雷达系统上面的   没法调试~~
      

  7.   

    第二个服务器???
    你不是一个服务器,两个客户端吗?
    不管你几个服务器, 服务器到要这样写
    while (1)
    {
         ClientSocket = accept(); 
    }
      

  8.   

    是这样的,我在一个服务器和一个客户端之间建立了两个Socket连接,只是采用了两个不同的端口号而已
      

  9.   

    更多关于Socket编程的参考