2017-10-07 12 views
-2

J'essaie de définir un numéro de port par défaut lorsque aucun port n'est entré dans la programmation du connecteur C. Est-ce que quelqu'un sait comment je peux faire cela? Je continue d'obtenir des erreurs de segmentation sur les tentatives.Programmation de la prise C aucun port entré

code:

#define PORT 12345 

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

    /* Thread and thread attributes */ 
    pthread_t client_thread; 
    pthread_attr_t attr; 


    int sockfd, new_fd; /* listen on sock_fd, new connection on new_fd */ 
    struct sockaddr_in my_addr; /* my address information */ 
    struct sockaddr_in their_addr; /* connector's address information */ 
    socklen_t sin_size; 
    int i=0; 

    /* Get port number for server to listen on */ 
    if (argc != 2) { 
     fprintf(stderr,"usage: client port_number\n"); 
     exit(1); 
    } 

    /* generate the socket */ 
    if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) { 
     perror("socket"); 
     exit(1); 
    } 

    /* generate the end point */ 
    my_addr.sin_family = AF_INET;   
    my_addr.sin_port = htons(atoi(argv[1]));  
    my_addr.sin_addr.s_addr = INADDR_ANY; 

je tenté de mettre la valeur par défaut à quand argc = 12345 2, mais je reçois une erreur de segmentation!. Toute aide serait appréciée!

+1

Afficher le code qui définit la valeur par défaut, et nous pouvons vous aider à le réparer. – Barmar

+2

"* J'ai essayé de régler la valeur par défaut à 12345 quand argc! = 2 *" où? – alk

Répondre

5

Vous pouvez utiliser une expression conditionnelle.

#define DEFAULT_PORT 12345 
my_addr.sin_port = htons(argc < 2 ? DEFAULT_PORT : atoi(argv[1])); 
+0

Succinct et clair. Mais les lecteurs ont besoin de noter que quelque chose comme 'stroul()' serait plus robuste si 'argv [1]' ne peut pas être considéré comme une valeur de port entière appropriée. 'atoi()' ne gère pas '" xyzzy "' bien ... –