如何修复此客户端-服务器代码以打印到标准输出?

时间:2019-04-13 16:00:09

标签: c shell sockets tcp

我正在尝试用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 server

gcc -Werror -std = c99 client.c -o client

此外,我在./client之前先运行./server,shell屏幕在客户端和服务器屏幕上都显示为“已连接”,这就是我在屏幕上(客户端或服务器)上写的内容都没有关系

任何帮助将不胜感激!

0 个答案:

没有答案