2013-09-28 70 views
0

我的程序是一個簡單的UDP客戶端服務器程序,在這個客戶端發送的數據存儲在變量mesg(在服務器),所以基本上我試圖提取數據元素的第一個字符(使用mesg [0])並將其打印在終端上。但這並不發生:(這裏是服務器和客戶端的代碼。套接字編程無法提取從客戶端發送的數據c

服務器 /*樣品UDP服務器*/

 #include <sys/socket.h> 
#include <netinet/in.h> 
#include <stdio.h> 

int main(int argc, char**argv) 
{ 
    int sockfd,n=0; 
    struct sockaddr_in servaddr,cliaddr; 
    socklen_t len; 
    char mesg[1000]; 

    sockfd=socket(AF_INET,SOCK_DGRAM,0); 

    bzero(&servaddr,sizeof(servaddr)); 
    servaddr.sin_family = AF_INET; 
    servaddr.sin_addr.s_addr=htonl(INADDR_ANY); 
    servaddr.sin_port=htons(32000); 
    bind(sockfd,(struct sockaddr *)&servaddr,sizeof(servaddr)); 

    for (;;) 
    { 
     len = sizeof(cliaddr); 
     n = recvfrom(sockfd,mesg,1000,0,(struct sockaddr *)&cliaddr,&len); 
     sendto(sockfd,mesg,n,0,(struct sockaddr *)&cliaddr,sizeof(cliaddr)); 
     printf("-------------------------------------------------------\n"); 
     mesg[n] = 0; 
     printf("Received the following:\n"); 

printf("%s \n", mesg[0]); 

    } 
} 

客戶

#include <sys/socket.h> 
#include <netinet/in.h> 
#include <stdio.h> 

int main(int argc, char**argv) 
{ 
    int sockfd,n; 
    struct sockaddr_in servaddr,cliaddr; 
    char sendline[1000]; 
    char recvline[1000]; 

    if (argc != 2) 
    { 
     printf("usage: udpcli <IP address>\n"); 
     exit(1); 
    } 

    sockfd=socket(AF_INET,SOCK_DGRAM,0); 

    bzero(&servaddr,sizeof(servaddr)); 
    servaddr.sin_family = AF_INET; 
    servaddr.sin_addr.s_addr=inet_addr(argv[1]); 
    servaddr.sin_port=htons(32000); 

    while (fgets(sendline, 10000,stdin) != NULL) 
    { 
     sendto(sockfd,sendline,strlen(sendline),0, 
      (struct sockaddr *)&servaddr,sizeof(servaddr)); 
     n=recvfrom(sockfd,recvline,10000,0,NULL,NULL); 
     recvline[n]=0; 
     fputs(recvline,stdout); 
    } 
} 
} 

回答

2

我唯一看到的是此

printf("%s \n", mesg[0]); 

這應該是

printf("%s \n", mesg); 

printf("%c \n", mesg[0]); 

如果你在打印一個字符真正意圖。

否則它似乎工作。

相關問題