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,但我得到段错误!任何帮助,将不胜感激!
答
您可以使用条件表达式。
#define DEFAULT_PORT 12345
my_addr.sin_port = htons(argc < 2 ? DEFAULT_PORT : atoi(argv[1]));
+0
简洁明了。但读者需要注意的是,如果'argv [1]'不能被信任为适当的整数端口值,'stroul()'会更加健壮。 'atoi()'不处理''xyzzy“'好吧...... –
显示设置默认值的代码,我们可以帮助您修复它。 – Barmar
“*我尝试将argc!= 2 *中的默认值设置为12345”在哪里? – alk