C 套接字编程中出现错误10054

C 套接字编程中出现错误10054,c,sockets,C,Sockets,我正在用C编写一个套接字编程代码,在同一台计算机上运行一个客户端和一个服务器 int main() { WSADATA wsa; if (WSAStartup(MAKEWORD(2, 2), &wsa) != 0) { cout << "WSAStartup failed!" << endl; return -1; } SOCKET sock = socket(AF_INET, SOCK

我正在用C编写一个套接字编程代码,在同一台计算机上运行一个客户端和一个服务器

  int main()
{
    WSADATA wsa;
    if (WSAStartup(MAKEWORD(2, 2), &wsa) != 0)
    {
        cout << "WSAStartup failed!" << endl;
        return -1;
    }

    SOCKET sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    if (sock == INVALID_SOCKET)
    {
        cout << "socket failed with error:" << WSAGetLastError() << endl;

        WSACleanup();
        return -1;
    }

    struct sockaddr_in service;
    service.sin_addr.s_addr = inet_addr("127.0.0.1");
    service.sin_family = AF_INET;
    service.sin_port = htons(5059);

    if (bind(sock, (SOCKADDR *)&service, sizeof(service)) == SOCKET_ERROR)
    {
        cout << "bind failed with error:" << WSAGetLastError() << endl;

        closesocket(sock);
        WSACleanup();
        return -1;
    }

    if (listen(sock, 5) == SOCKET_ERROR)
    {
        cout << "listen failed with error:" << WSAGetLastError() << endl;

        closesocket(sock);
        WSACleanup();
        return -1;
    }
    while (true)
    {
        cout << "Waiting for a PKCS11 client ..." << endl;

        SOCKET accsock = accept(sock, NULL, NULL);
        if (accsock == INVALID_SOCKET)
        {
            cout << "accept failed with error:" << WSAGetLastError() << endl;

            closesocket(sock);
            WSACleanup();
            return -1;
        }

        cout << "PKCS11 client connected ..." << endl;

        while (true)
        {
            int receive_size = 0;
            char test[20];
            receive_size = recv(accsock, test, 20, 0);
            if (receive_size == SOCKET_ERROR)
            {
                cout << endl << "ERROR : "<<WSAGetLastError() << " PKCS11 client disconnected." << endl;
                closesocket(accsock);
                break;
            }

            test[receive_size] = '\0';
            command = temp;
            printf("recieved value is : %s\n",test);
          }
            }
intmain()
{
WSADATA wsa;
if(WSAStartup(MAKEWORD(2,2),&wsa)!=0)
{

cout您的客户端正在发送数据,这会将数据放入IP堆栈中进行发送。然后,它会立即终止,这意味着IP堆栈将取消发送并不正常地关闭套接字


在终止客户端之前,您需要
关闭
关闭套接字
套接字。

您的客户端正在发送数据,这会将数据放入IP堆栈中进行发送。然后它立即终止,这意味着IP堆栈将取消发送并不正常地关闭套接字


在终止客户端之前,您需要
关闭
关闭套接字
套接字。

您的客户端正在发送数据,这会将数据放入IP堆栈中进行发送。然后它立即终止,这意味着IP堆栈将取消发送并不正常地关闭套接字


在终止客户端之前,您需要
关闭
关闭套接字
套接字。

您的客户端正在发送数据,这会将数据放入IP堆栈中进行发送。然后它立即终止,这意味着IP堆栈将取消发送并不正常地关闭套接字


在终止客户端之前,您需要关闭套接字。

您是否考虑过查找Winsock错误10054?请注意,如果recv()调用完全填满了您的小缓冲区,则“test[receive_size]=”\0“;”将超出范围:(您是否考虑过查找Winsock错误10054?请注意,如果您的小缓冲区被recv()调用完全填满,“test[receive_size]='\0';”将超出范围:(您是否考虑过查找Winsock错误10054?请注意,如果您的小缓冲区被recv()调用完全填满,“test[receive_size]”='\0';'将超出范围:(您是否考虑过查找Winsock错误10054?请注意,如果recv()调用完全填满了您的小缓冲区,'test[receive_size]='\0';'将超出范围:(如果关闭套接字,则不需要关机,除非该套接字已被继承,并且您希望它立即完全关闭。如果关闭套接字,则不需要关机,除非该套接字已被继承,并且您希望它立即完全关闭。如果关闭套接字,则不需要关机,除非您已被继承如果套接字已被继承,并且您希望它立即完全关闭,则不需要关机,除非套接字已被继承,并且您希望它立即完全关闭。
int main(){
    /*CK_SESSION_HANDLE hSession = NULL;
    CK_MECHANISM_PTR pMechanism = NULL;
    CK_OBJECT_HANDLE hKey = NULL;
    C_EncryptInit(hSession, pMechanism, hKey);*/

    char temp[10];
    printf("initialising ... \n");
    if (WSAStartup(MAKEWORD(2, 2), &wsa) != 0)
    {
        printf("Error = :%d", WSAGetLastError());
        WSACleanup();
        return -1;
    }
    printf("initialised\n");
    //create a socket
    if ((s = socket(AF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET)
    {
        printf("Could not create socket : %d", WSAGetLastError());
        WSACleanup();
        return -1;
    }

    printf("Socket created.\n");


    server.sin_addr.s_addr = inet_addr("127.0.0.1");
    server.sin_family = AF_INET;
    server.sin_port = htons(5059);

    //Connect to remote server
    if (connect(s, (struct sockaddr *)&server, sizeof(server)) < 0)
    {
        puts("connect error");
        return 1;
    }

    puts("Connected");


    _itoa(CK_ENCRYPT, temp, 16);
    command = temp;
    int counter = 0;
    char* test = "H";
    while (counter != strlen(test)) {
    counter += send(s, test, strlen(test), 0);
    cout << counter << endl;
}   


    //while (1);
    return 0;
}