Программирование сокетов на C, код сервера с ошибкой - PullRequest
0 голосов
/ 29 сентября 2019
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>

int main(int argc, char *argv[]){
    // established the socket
    char inputBuffer[256] = {};
    char message[] = {"Hi this is the server.\n"};
    int sockfd = 0;
    int forClientSocketfd = 0;
    sockfd = socket(AF_INET, SOCK_STREAM, 0);
    if(sockfd == -1) printf("Fail to create the socket.");

    // socket connection
    struct sockaddr_in serverInfo, clientInfo;
    int addrlen = sizeof(clientInfo);
    bzero(&serverInfo, sizeof(serverInfo));

    serverInfo.sin_family = PF_INET;
    serverInfo.sin_addr.s_addr = INADDR_ANY;
    serverInfo.sin_port = htron(10024);
    bind(sockfd, (struct sockaddr *) &serverInfo, sizeof(serverInfo));
    listen(sockfd, 5);

    while(1){
        forClientSocketfd = accept(sockfd, (struct sockaddr*) &clientInfo, &addrlen);
        send(forClientSocketfd, message, sizeof(message), 0);
        recv(forClientSocketfd, inputBuffer, sizeof(inputBuffer), 0);
        printf("Received from client: %s\n", inputBuffer);
    }

    return 0;
}

Это код для программирования сокетов, который я видел из сети.когда я его скомпилировал, выдается сообщение об ошибке, как показано ниже.Понятия не имею, что происходит, хотя поиск в интернете.ps Клиент работает как обычно.

введите описание изображения здесь

1 Ответ

2 голосов
/ 29 сентября 2019

у вас есть опечатка в строке номер 24, это должно быть htons, а не htron

htons ()

Функция htons принимает 16-битное число в порядке байтов хоста и возвращает 16-битное число в порядке байтов сети, используемом в сетях TCP / IP (семейство адресов AF_INET или AF_INET6).Функцию htons можно использовать для преобразования номера порта IP в порядке байтов хоста в номер порта IP в порядке байтов сети

, а также добавьте заголовочный файл stdio в ваш код для удаления других предупреждений.окончательно исправленный код без предупреждений или ошибок.

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

int main(int argc, char *argv[])
{
    // established the socket
    char inputBuffer[256] = {};
    char message[] = {"Hi this is the server.\n"};
    int sockfd = 0;
    int forClientSocketfd = 0;
    sockfd = socket(AF_INET, SOCK_STREAM, 0);
    if (sockfd == -1)
        printf("Fail to create the socket.");

    // socket connection
    struct sockaddr_in serverInfo, clientInfo;
    int addrlen = sizeof(clientInfo);
    bzero(&serverInfo, sizeof(serverInfo));

    serverInfo.sin_family = PF_INET;
    serverInfo.sin_addr.s_addr = INADDR_ANY;
    serverInfo.sin_port = htons(10024);
    bind(sockfd, (struct sockaddr *)&serverInfo, sizeof(serverInfo));
    listen(sockfd, 5);

    while (1)
    {
        forClientSocketfd = accept(sockfd, (struct sockaddr *)&clientInfo, &addrlen);
        send(forClientSocketfd, message, sizeof(message), 0);
        recv(forClientSocketfd, inputBuffer, sizeof(inputBuffer), 0);
        printf("Received from client: %s\n", inputBuffer);
    }

    return 0;
}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...