Как исправить этот код клиент-сервер для печати на стандартный вывод? - PullRequest
1 голос
/ 13 апреля 2019

Я пытаюсь написать программу клиент-сервер на языке C. На данный момент у меня есть соединение между сервером и клиентом, но по какой-то причине ничего не происходит и не печатается после «подключенной» печати. ​​

Я пробовал пробную печать до и после «подключен», но на моей оболочке ничего не отображается.

мой сервер:

int main(void)
{
    int sockfd, newsockfd, portno, clilen;
    struct sockaddr_in serv_addr, cli_addr;

    sockfd = socket(AF_INET, SOCK_STREAM, 0);//Af_INet is protocol tcp np? ip? - this creates an empty socket
    if (sockfd < 0)
    {
        printf("socket failed\n");
        exit(0);
    }

    if (setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &(int){ 1 }, sizeof(int)) < 0)
    {
        printf("setsockopt failed\n");
        exit(0);
    }

    // calls to bind(), listen() and accept() here
    memset((char *) &serv_addr, 0, sizeof(serv_addr));
    portno = 8888;
    serv_addr.sin_family = AF_INET; 
    serv_addr.sin_addr.s_addr = INADDR_ANY;
    serv_addr.sin_port = htons(portno);

    if (bind(sockfd, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0)
    {
        printf("bind failed\n");
        exit(0);  
    }

    listen(sockfd, 5);

    clilen = sizeof(cli_addr);
    newsockfd = accept(sockfd, (struct sockaddr *) &cli_addr, &clilen);
    if (newsockfd < 0)
    {
        printf("accept failed\n");
        exit(0);
    }
    //end calls

    printf("[Server] Connected\n"); // nothing prints before or after this


      int n;
      char query[BUFFER_SIZE]={0};
      char result[BUFFER_SIZE]={0};
      char *hello = "Hello from client"; 

      send(newsockfd, hello , strlen(hello) , 0 ); //write also doesn't work
      printf("Hello message sent\n"); 
      n = read( newsockfd, query, BUFFER_SIZE); 
      printf("%s\n",query );

       close(newsockfd);
       close(sockfd);

мой клиент:

int main(void)
{
    int sockfd, portno;
    struct sockaddr_in serv_addr;
    struct hostent *server;

    sockfd = socket(AF_INET, SOCK_STREAM, 0);
    if (sockfd < 0)
    {
        printf("socket failed\n");
        exit(0);
    }

    //get host and connect
    portno = 8888;
    server = gethostbyname("localhost");
    if (server == NULL)
    { 
        printf("gethostbyname failed\n");
        exit(0);
    }

    memset((char *)&serv_addr, 0, sizeof(serv_addr));    
    serv_addr.sin_family = AF_INET;
    memcpy((void*)&serv_addr.sin_addr.s_addr, (void*)server->h_addr, server->h_length);
    serv_addr.sin_port = htons(portno);

    if (connect(sockfd, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0)
    {
        printf("connect failed\n");
        exit(0);
    }

    //end connect

    printf("client here");//doesn't show on shell screen
    printf("[Client] Connected\n");//shows on shell screen

    int n;
    char *hello = "Hello from client"; 
    char query[BUFFER_SIZE]={0};
    char result[BUFFER_SIZE]={0};
    send(sockfd, hello, strlen(hello), 0);
    printf("Hello message send\n");
    n=read(sockfd,query,BUFFER_SIZE);
    printf("%s\n",query);

        close(sockfd);

Я компилирую их с помощью:

gcc -Werror -std = c99 server.c -o сервер

gcc -Werror -std = c99 client.c -o клиент

Также, Я запускал ./server раньше ./client, экраны оболочки показывают «Connected» на экранах клиента и сервера, и это не имеет значения, что я пишу на экране (клиента или сервера)

Любая помощь будетцениться!

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