本地主机服务器套接字程序不起作用

我有用C编写的服务器和客户端套接字程序。我想使用local host ipaddress 127.0.0.1将客户端程序与我的笔记本电脑上的服务器程序连接。 当我执行服务器程序。 它的输出绑定失败并停止。 如何使客户端连接到同一台笔记本电脑上的服务器,即通过本地主机。 请帮忙。

这是服务器代码(这是一个echo服务器程序):

 #include  #include  #include  #include  #include  #include  main(int argc, char *argv[]) { int clilen, sockfd, newsockfd, n, cpid; char msg[100]; struct sockaddr_in serv_addr, cli; if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0) { printf("socket failed to establish\n"); exit(0); } printf("socket created\n"); bzero((char *)&serv_addr, sizeof(serv_addr)); serv_addr.sin_family = AF_INET; serv_addr.sin_addr.s_addr = inet_addr(argv[1]); serv_addr.sin_port = htons(atoi(argv[2])); if (bind(sockfd, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0) { printf("binding failed\n"); exit(0); } printf("binding established\n"); if (listen(sockfd, 5) < 0) { printf("not listening\n"); exit(0); } printf("listening|n"); for (;;) { clilen = sizeof(cli); if ((newsockfd = accept(sockfd, (struct sockaddr *)&cli, &clilen)) < 0) { printf("accept failed\n"); exit(0); } printf("accepted\n"); cpid = fork(); if (cpid == 0) { n = read(newsockfd, msg, 80); msg[n] = '\0'; write(newsockfd, msg, strlen(msg)); close(newsockfd); exit(0); } } } 

我相信问题已经发生,因为您通过命令行传递了错误的值。

以下代码行可能没有按预期工作,

 serv_addr.sin_addr.s_addr=inet_addr(argv[1]); 

请改成它

  servaddr.sin_addr.s_addr = htonl(INADDR_ANY); 

还要添加此检查以测试端口号,

 unsigned int port; if ( argc < 2 ) { port = Some_Port_No; } else { port=atoi(argv[2]); } 

并改变

 serv_addr.sin_port=htons(atoi(argv[2])); 

 servaddr.sin_port = htons(port); 

因此,通常在编写服务器时,只需将其绑定到任何地址,而不是特定地址。 重要的是服务器侦听的端口号。 当您告诉客户端连接到localhost时,您还会将服务器正在侦听的端口号传递给它,以便建立连接。

尝试改变这个:

 serv_addr.sin_addr.s_addr=inet_addr(argv[1]); 

对此:

 serv_addr.sin_addr.s_addr=INADDR_ANY; 

这是一个可以帮助你很多的链接: http : //beej.us/guide/bgnet/output/html/singlepage/bgnet.html