Программирование сокетов с использованием Windows 10 и C (Visual Studio 2015) - PullRequest
0 голосов
/ 30 мая 2018

Я написал код сервера сокетов, используя Windows 10 и C (Visual Studio 2015), но я думаю, что код привязки или прослушивания неправильный.

Когда я выполняю свой код, он не ждет, пока клиент не подключится.Это закончено после распечатки "успешного завершения инициализации winsock" и "создания успешного сокета".

Помогите мне, пожалуйста.


#include <stdio.h>
#include <winsock2.h>

int main(int argc, char *argv[]) {

    WSADATA wsaData;

    struct sockaddr_in address_of_server;
    struct sockaddr_in address_of_client;

    int socket_of_client;
    int size_of_address_of_client = sizeof(address_of_client);

    if (WSAStartup(MAKEWORD(2, 2), &wsaData) == 0) {
        printf("winsock initialization success\n");
    }
    else {
        printf("winsock initialization failure\n");
    }

    SOCKET socket_of_server = socket(AF_INET, SOCK_STREAM, 0);

    if (socket_of_server == -1) {
        printf("creating socket failure\n");
    }
    else {
        printf("creating socket success\n");
    }

    memset(&address_of_server, 0, sizeof(address_of_server));
    address_of_server.sin_family = AF_INET;
    address_of_server.sin_addr.s_addr = htonl(INADDR_ANY);
    address_of_server.sin_port = htons(atoi(10000));

    bind(socket_of_server, (struct sockaddr*)&address_of_server, sizeof(address_of_server));

    listen(socket_of_server, 5);

    socket_of_client = accept(socket_of_server, (struct sockaddr*)&address_of_client, &size_of_address_of_client);

    WSACleanup();

}

1 Ответ

0 голосов
/ 30 мая 2018

После listen () вам нужно вызвать accept (), чтобы получить новый подключенный сокет.listen () просто запускает прослушивание и не ждет подключения любого клиента.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...