2013-04-12 39 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); 
相關問題