似乎我使用
while(1)
{
    connect(...)
}这样的格式,第一次能够连接成功,第二次之后就都返回SOCKET_ERROR了

解决方案 »

  1.   

    使用的是同一个socket去连的吧。已经连接的socket不用重复用。
    下面的代码可以循环连接。
    #include <stdio.h>
    #include <winsock2.h>
    #pragma comment(lib, "ws2_32.lib")int main()
    {
        WSADATA data = {0};
        WSAStartup(0x202, &data);    SOCKET sck = socket(AF_INET, SOCK_STREAM, 0);    sockaddr_in addr_local = {0};
        sockaddr_in addr_remote= {0};    addr_local.sin_family = AF_INET;
        addr_remote.sin_family = AF_INET;
        addr_remote.sin_addr.s_addr = inet_addr("127.0.0.1");
        addr_remote.sin_port = htons(445);    while(1)
        {
            SOCKET sck = socket(AF_INET, SOCK_STREAM, 0);
            bind(sck, (const sockaddr*)&addr_local, sizeof(addr_local));
            int nRet = connect(sck, (const sockaddr*)&addr_remote, sizeof(addr_remote));
            if (nRet < 0)
            {
                break;
            }
            closesocket(sck);
            Sleep(100);
        }
        WSACleanup();
        return 0;
    }