簡體   English   中英

C (UDP) 中的套接字服務器不接收數據包。 怎么做?

[英]Socket server in C (UDP) doesn't receive packets. How to do?

我已經在 C 中完成了一個 UDP 套接字服務器。只有當數據包被發送到 127.0.0.1 時,服務器才能正常工作。 我正在嘗試使用數據包發送方對其進行測試,並且我想在地址 192.168.231.54 處打開一個套接字。 無論如何,如果我在代碼中寫入這個地址,我會收到一個錯誤(“無法分配請求的地址”),並且對於每個與 ​​127.0.0.1 不同的地址都會出現此錯誤。 我想打開一個到 192.168.231.54 的套接字,我想用 Packet Sender 將數據包發送到這個地址。

這是服務器代碼:

//*********SOCKET OPENING**************
   
    int fd;
    struct sockaddr_in serveraddr, cliaddr;

    if ( (fd = socket(AF_INET, SOCK_DGRAM, 0)) < 0 ) {
        perror( "socket failed" );
        exit(EXIT_FAILURE);
    }
        
    memset( &serveraddr, 0, sizeof(serveraddr) );
    memset(&cliaddr, 0, sizeof(cliaddr));

    serveraddr.sin_family = AF_INET;
    serveraddr.sin_port = htons(50037);
    serveraddr.sin_addr.s_addr = htonl(INADDR_ANY);  

    if ( bind(fd, (const struct sockaddr *)&serveraddr, sizeof(serveraddr)) < 0 ) {
        perror( "bind failed" );
        exit(EXIT_FAILURE);
    }
    else{
        perror("socket opened");
    }

    //Receiving data into hex_array array
    char hex_array[lenght];
    int len;
    len = sizeof(cliaddr);
    int n = recvfrom(fd, (uint8_t *)hex_array, lenght, NULL, ( struct sockaddr *) &cliaddr, &len);
    //Printing of the received data on the socket
    printf("START DEBUG:\n");
    printf("%s\n", hex_array);
    printf("END DEBUG.\n");

您綁定套接字的地址必須實際上是您計算機的 IP 地址。 你不能隨便選擇一個地址。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM