2012-10-24 159 views
0

服務器必須回顯客戶端使用Linux中的C程序發送的消息。我使用Ubuntu操作系統(我不知道這些信息是否有用! )。它第一次工作。但第二次,它給了'錯誤連接'。我試圖更改端口號。但仍然沒有奏效。請引導我。我是初學者。連接基本TCP客戶端服務器編程錯誤C

server.c

#include <stdio.h> 
#include <stdlib.h> 
#include <sys/socket.h> 
#include <string.h> 
#include <sys/types.h> 
#include <unistd.h> 
#include <netinet/in.h> 

int main() 
{ 
    int sd, sd1, len, confd, n; 
    struct sockaddr_in ser, cli; 
    char msg[50]; 

    if((sd = socket(AF_INET,SOCK_STREAM, 0)) < 0) 
     printf("\nSocket creation error\n"); 

    bzero(&ser, sizeof(ser)); 
    ser.sin_family = cli.sin_family = PF_INET; 
    ser.sin_port = htons(10000); 
    ser.sin_addr.s_addr = htonl(INADDR_ANY); 
    len = sizeof(ser); 

    if ((bind(sd, (struct sockaddr*)&ser, len)) < 0) { 
     printf("\nBind Error"); 
     exit(0); 
    } 
    if (listen(sd, 2) == 0) { 
     if ((sd1 = accept(sd, (struct sockaddr*)&ser, &len)) > 0) { 
      do { 
       bzero(&msg, 50); 
       read(sd1, msg, 50); 
       //int m=(int)msg; 
       printf("\nMessage from client:%s\n", msg); 
       write(sd1, msg, strlen(msg)); 
       if(strcmp(msg, "exit") == 0) 
        break; 
      } while(strcmp(msg, "exit") != 0); 
     } 
    } 
} 

* 強大的文本 * client.c

#include <stdio.h> 
#include <stdlib.h> 
#include <sys/socket.h> 
#include <string.h> 
#include <sys/types.h> 
#include <unistd.h> 
#include <netinet/in.h> 

int main() 
{ 
    int sd, n, len; 
    struct sockaddr_in ser, cli; 
    char text[50]; 

    if ((sd = socket(AF_INET,SOCK_STREAM, 0)) < 0) 
     printf("\nSocket creation error\n"); 

    bzero(&ser, sizeof(ser)); 
    ser.sin_family = cli.sin_family = PF_INET; 
    ser.sin_port = htons(10000); 
    ser.sin_addr.s_addr = htonl(INADDR_ANY); 
    len = sizeof(ser); 

    if ((connect(sd, (struct sockaddr*)&ser, len)) < 0) { 
     printf("\nError connection"); 
     exit(0); 
    } 
    while(1) { 
     strcpy(text, " "); 
     printf("\nEnter data which is to be sent:"); 
     scanf("%s", text); 
     write(sd, text, strlen(text)); 
     read(sd, text, 50); 
     printf("\nEcho msg from server:%s", text); 
     if (strcmp(text, "exit") == 0) 
      break; 
    } 
    close(sd); 
} 
+1

1)你真的應該縮進代碼和2)當連接失敗可以通過errno變量來查詢有關該問題的信息,正如手冊頁所解釋的那樣。您應該在失敗時使用strerror函數創建一條錯誤消息,這應該可以幫助您(和我們)瞭解哪裏出了問題。 – fvu

回答

1

可以將您的客戶端是否連接到任何地址

ser.sin_addr.s_addr=htonl(INADDR_ANY); 

最有可能你的意思是連接到一個特定的服務器:

ser.sin_addr.s_addr=inet_addr("127.0.0.1"); 
+0

謝謝!有效 – Gomathi