2011-10-21 141 views
0

任何幫助/反饋將不勝感激。我想設置一個監聽器(服務器),使其能夠從廣播客戶端接收數據,然後通過同一個套接字發送信息。如果可以,這在C編程中可以做到嗎? 編輯:CODE ADDED聽衆可以接收和發送廣播請求嗎?

/* udpserver.c */ 

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

int main() 
{ 
    int sock; 
    int addr_len, bytes_read; 
    char recv_data[1024]; 
    struct sockaddr_in server_addr , client_addr; 


    if ((sock = socket(AF_INET, SOCK_DGRAM, 0)) == -1) { 
     perror("Socket"); 
     exit(1); 
    } 

    server_addr.sin_family = AF_INET; 
    server_addr.sin_port = htons(5000); 
    server_addr.sin_addr.s_addr = INADDR_ANY; 
    bzero(&(server_addr.sin_zero),8); 


    if (bind(sock,(struct sockaddr *)&server_addr, 
     sizeof(struct sockaddr)) == -1) 
    { 
     perror("Bind"); 
     exit(1); 
    } 

    addr_len = sizeof(struct sockaddr); 

printf("\nUDPServer Waiting for client on port 5000"); 
    fflush(stdout); 

while (1) 
{ 

     bytes_read = recvfrom(sock,recv_data,1024,0, 
        (struct sockaddr *)&client_addr, &addr_len); 


    recv_data[bytes_read] = '\0'; 

     printf("\n(%s , %d) said : ",inet_ntoa(client_addr.sin_addr), 
            ntohs(client_addr.sin_port)); 
     printf("%s", recv_data); 
    fflush(stdout); 

     /* HERE IS MY CODE ADDED */ 
     if (sendto(sockfd, "HELLO", 5, 0, (struct sockaddr *)&client_addr, &addr_len) == -1) { 
    perror("talker: sendto"); 
    exit(1); 
} 
    } 
    return 0; 
    } 

回答

0

套接字已經雙向的,這意味着你可以用相同的連接發送和接收數據。 有一個在TCP/UDP服務器和客戶端在C的很好的例子here

+0

您好Steve,我使用網站的示例(udpserver.c),但是在接收到消息後添加函數sendto()時,它不起作用。請參閱上面的代碼以查看我添加的內容。 thx –

0

recvFrom工作?你得到了你在recvFrom()之後的印刷品嗎?

+0

我想知道你是否被阻止接收任何機會。 –