读书人

帮忙看上这段代码有什么有关问题吗(1

发布时间: 2012-10-12 10:17:04 作者: rapoo

帮忙看下这段代码有什么问题吗(10093错误码)
在部分机器上面会出现第一次循环socket成功,但是第二次循环报10093的问题。
稍后上错误日志。
代码如下:

C/C++ code
#include <Winsock2.h>#include <stdio.h>#pragma comment(lib, "ws2_32.lib ") void main(){    //加载socket    int iCount = 0;    printf("Input the times you want to loop.\n");    scanf("%d", &iCount);    for (int iLoop=0;iLoop<iCount;++iLoop)    {        WORD wVrsnRqst;        WSADATA wsaData;        int err;                wVrsnRqst = MAKEWORD(1, 1);                err = WSAStartup(wVrsnRqst, &wsaData);        printf("WSAStartup completed.\n");                if (0 != err)        {            printf("Failed in starting socket!\n");            system("pause");            return;        }                if (LOBYTE(wsaData.wVersion) != 1 || HIBYTE(wsaData.wVersion) != 1)        {            printf("Start to clean socket!\n");            WSACleanup();            system("pause");            return;        }                SOCKET sockClnt = socket(AF_INET, SOCK_STREAM, 0);        printf("Create socket. The last error is %d\n", WSAGetLastError());        printf("sockClnt的值为:%d\n", sockClnt);                unsigned long ul = 0;        if( ioctlsocket(sockClnt, FIONBIO, (unsigned long*)&ul) == SOCKET_ERROR )         {            printf("The last error is: %d\n", WSAGetLastError());            printf("failed in ioctlsocket\n");            system("pause");            return;        }        printf("Succeed in setting block mod.\n");                SOCKADDR_IN addrSrv;        addrSrv.sin_addr.S_un.S_addr = inet_addr("211.147.87.211");        addrSrv.sin_family = AF_INET;        addrSrv.sin_port = htons(8022);        //发出请求        printf("Try connecting to 211.147.87.211, 8022...\n");        int iRet = connect(sockClnt, (SOCKADDR*)&addrSrv, sizeof(SOCKADDR));            printf("The return of connect is %d.\n", iRet);        if (iRet == SOCKET_ERROR)        {            printf("The last error is %d.\n", WSAGetLastError());        }                //接收数据        //char recvBuf[100];        //recv(sockClnt, recvBuf, 100, 0);        //printf("%s\n", recvBuf);        //send(sockClnt, "I am client!", strlen("I am client!") + 1, 0);        if (sockClnt > 0)        {            iRet = closesocket(sockClnt);            printf("close socket return:%d, and last error is:%d\n", iRet, WSAGetLastError());            sockClnt = 0;        }                iRet = WSACleanup();        printf("WSACleanup return %d, and last error is:%d\n", iRet, WSAGetLastError());    }        system("pause");}


[解决办法]
WSAStartup, WSACleanup放到循环外。
这样简单的代码不用自己写,论坛上就有:
http://download.csdn.net/detail/geoff08zhang/4571358
[解决办法]
请看1L。HOHO

读书人网 >VC/MFC

热点推荐