2017-10-07 10 views
-2

Cソケットプログラミングでポートが入力されていない場合のデフォルトポート番号を設定しようとしています。私はこれをどのようにすることができるか誰にも分かりますか?私は試行でセグメンテーションフォルトを得続けます。Cソケットプログラミングなしポートが入力されました

コード:!私は12345のargc = 2にデフォルトを設定しようとしたが、私は、セグメンテーションフォールトを取得

#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; 

。どんな助けもありがとう!

+1

デフォルトを設定するコードを表示してください。このコードを修正することができます。 – Barmar

+2

"* argc!= 2 *のときにデフォルトを12345に設定しようとしましたが、どこですか? – alk

答えて

5

条件式を使用できます。

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

簡潔で明瞭です。しかし、 'argv [1]'が適切な整数のポート値であると信じられないと、 'stroul()'のようなものがより堅牢になることに注意する必要があります。 'atoi()'は '' xyzzy "'をうまく扱えません... –

関連する問題