2013-04-12 38 views
3

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

这里是服务器端的代码(这是一个回声服务器程序):

#include <stdio.h> 
#include <stdlib.h> 
#include <sys/socket.h> 
#include <netinet/in.h> 
#include <arpa/inet.h> 
#include <string.h> 

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); 
     } 
    } 
} 
+0

解决您的格式......这是不可读这样 –

回答

0

当服务器写入所以通常情况下,你只是把它绑定到任何地址,而不是一个特别。重要的是服务器侦听的端口号。当您告诉客户端连接到本地主机时,您还会传递服务器正在侦听的端口号,以便建立连接。

尝试修改此:

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

1

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

像您期望的代码行可能没有工作,

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]); 
} 

And change

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

servaddr.sin_port = htons(port); 
相关问题