Telnet отказывается от соединения - PullRequest
1 голос
/ 06 апреля 2019

Я настраиваю программу проверки правописания, и у меня возникают проблемы с подключением к серверу, на котором находится программа.Я не знаю, если это проблема с созданием соединения через сокет или как я использую клиент telnet.

Я проверил его на своем компьютере, используя telnet с адресом 127.0.0.1 и портом 3335и это работает хорошо.когда я пытаюсь проверить его на сервере linux, telnet не подключается и либо отключается, либо полностью отказывается.

Для справки, когда я пытаюсь подключиться к серверу Linux.Я SSH на сервер, чтобы запустить программу.Затем я запускаю программу, а затем использую telnet в другом окне оболочки, чтобы попытаться подключиться.Я получаю адрес сервера с помощью команды nslookup mach_name.

Я вставлю код для создания сокета ниже, если это проблема кода в программе:

    int main(int argc, char** argv) {
       dequeue(); // to take junk values out of the queue
       // initialize all values
       pthread_mutex_init(&workLock, NULL);
       pthread_cond_init(&canTake, NULL);
       pthread_cond_init(&canPut,NULL);
       char *dict = NULL, *port = NULL;
       int newsockfd; // to create the socket conditions 
       struct sockaddr_in clienaddr; // to get the client info
       socklen_t clilen;
       pthread_t threads[NUM_WORKERS]; // for the thread id
       if(argc < 2){
           dict = DEFAULT_DICT;
           port = DEFAULT_PORT;
       } else {
           dict = argv[1];
           port = argv[2];         
       }
       for (int i = 0; i < NUM_WORKERS; i++) {
           pthread_create(&(threads[i]), NULL, (void *) &worker,NULL);
       }
       load_table(dict); // load the table 
       int listenfd, portno;
       struct sockaddr_in server;
       socklen_t srv_len = sizeof(server);
       listenfd = socket(AF_INET, SOCK_STREAM, 0);
       if(listenfd < 0){
           perror("socket failed");
           exit(EXIT_FAILURE);
        }
        // changes all the buffers to 0 
        bzero((char *) &server, sizeof(server));
        // changes the port into a number 
        portno = atoi(port);
        server.sin_addr.s_addr = INADDR_ANY;
        server.sin_family = AF_INET;
        server.sin_port = htons(portno); 
        //binds the port to the listenfd
        if(bind(listenfd, (struct sockaddr *) &server, srv_len)< 0){
           perror("bind failed");
           exit(EXIT_FAILURE);
        }
        // waits for incoming connections 
        if(listen(listenfd,BACKLOG) < 0){
           close(listenfd);
           perror("listen failed");
           exit(EXIT_FAILURE);
        }
        clilen = sizeof(clienaddr); 
        bzero((char *) &clienaddr, sizeof(clienaddr));
        // listenfd = getlistenfd(port); // get the listen fd

        while(1){
           newsockfd = accept(listenfd, (struct sockaddr *) &clienaddr, &clilen); // accept a connection 
           pthread_mutex_lock(&workLock); // make sure only one thread can access the queue 
           while(size == MAXSIZE) pthread_cond_wait(&canPut, &workLock); // make sure main thread is put to sleep if there is no space for the queue
           enqueue(newsockfd); // add the socket to the queue
           pthread_cond_signal(&canTake); // signal that worker threads can take from the queue
           pthread_mutex_unlock(&workLock); // unlock so another socket can be added 
       }
       close(listenfd);
       return (EXIT_SUCCESS);
   }
...