C socket编程没有输入端口

C socket编程没有输入端口

问题描述:

我试图设置一个默认端口号,当没有端口输入到C socket编程中。有谁知道我该怎么做?我在尝试时不断收到分段错误。C socket编程没有输入端口

代码:

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

我尝试了默认设置12345当ARGC = 2,但我得到段错误!任何帮助,将不胜感激!

+1

显示设置默认值的代码,我们可以帮助您修复它。 – Barmar

+2

“*我尝试将argc!= 2 *中的默认值设置为12345”在哪里? – alk

您可以使用条件表达式。

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

简洁明了。但读者需要注意的是,如果'argv [1]'不能被信任为适当的整数端口值,'stroul()'会更加健壮。 'atoi()'不处理''xyzzy“'好吧...... –