Я настраиваю программу проверки правописания, и у меня возникают проблемы с подключением к серверу, на котором находится программа.Я не знаю, если это проблема с созданием соединения через сокет или как я использую клиент 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);
}