функция accept не ожидает соединения (не блокируется)

Измените свой код на это

timer t=new timer();
t.start();
while (t.isAlive()) {//not sure what to put in my while statement
    System.out.print("Guess a word on the board! ");
    if(test.CheckGame(scan.next())==true){
        System.out.print("Good job! ");
    }
    else    
        System.out.print("Guess again! ");
}

. Когда функция запуска завершена, t.isAlive будет ложным. Вам также может понадобиться передать объект таймера и проверить объект isAlive () объекта в зависимости от того, как работает CheckGame. Это значит, что вход не может быть введен через 10 секунд в течение неопределенного периода времени.

0
задан n33dh3lp1nC 7 March 2019 в 11:02
поделиться

1 ответ

Существует несколько ошибок и предупреждений, выданных компилятором для вашего кода.

Но я полагаю, что решающим фактором было то, что вы делали,

 sock_fd = listen(sock_fd, 1);

, что должно быть,

 listen(sock_fd, 1);

И что вы использовали команду сокета с неинициализированной переменной .

// sock_fd = socket(domain, type, 0); // wrong
(sock_fd=socket(AF_INET,SOCK_STREAM,0); // correct

Следующие настройки также отсутствовали,

// The following three lines were missing
localAddr.sin_family = AF_INET;
localAddr.sin_addr.s_addr = htonl(INADDR_ANY);
localAddr.sin_port = htons(PORT);

Вот полный код с большим количеством исправлений, в котором все еще есть некоторые предупреждения о неиспользуемых переменных и т. Д., Но, по крайней мере, все идет " быть готовым к принятию соединений. "

Вы должны действительно включить все возможные предупреждения на вашем компиляторе и прочитать книгу сетевого программирования Биджа .

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>

#define PORT 4444

int main(void) {
    // Declare initial values;
    int domain, sock_fd, type;
    struct sockaddr_in localAddr;

    // The following three lines were missing
    localAddr.sin_family = AF_INET;
    localAddr.sin_addr.s_addr = htonl(INADDR_ANY);
    localAddr.sin_port = htons(PORT);

    socklen_t addr_length;

    // sock_fd = socket(domain, type, 0);
    //////////////////////Creating a SOCKET/////////////////////////
    if((sock_fd=socket(AF_INET,SOCK_STREAM,0))==-1)
    {
        printf("ERROR:Socket failed\n");
        return -1;
    }

    if (bind(sock_fd, (struct sockaddr *) &localAddr, sizeof(struct sockaddr)) == -1)
    {
        printf("ERROR:Binding on server\n");
        close(sock_fd);
        return -1;
    }

    // Setup listening
    listen(sock_fd, 1);
    char buffer[1024];
    int sin_size, recv_len;
    while (1) {
        int client_fd;
        struct sockaddr_in clientAddr;
        sin_size = sizeof(clientAddr);
        client_fd = accept(sock_fd, NULL, NULL);
        if (client_fd == -1) {
            printf("Could not accept new connection");
            exit(-1);
        }
        close(client_fd);
    }
    close(sock_fd);
    return 0;
}
0
ответ дан Joey Mallone 7 March 2019 в 11:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: