C 客户端没有收到服务器发送的消息

时间:2021-02-01 15:55:10

标签: c client-server

我只是在编写一个简单的测试程序来熟悉使用 c 实现的客户端服务器。我的预期输出如下: 对于客户:

Hello message sent
Hello from server

但是,我得到以下输出:

Hello message sent

客户端等待消息接收但从未收到。我不知道如何解决这个问题。

这是我运行的代码。

client.c

#include <stdio.h> 
#include <sys/socket.h> 
#include <arpa/inet.h> 
#include <unistd.h> 
#include <string.h> 
#define PORT 8080 

int main(int argc, char const *argv[]) 
{ 
        int sock = 0, valread; 
        struct sockaddr_in serv_addr; 
        char *hello = "Hello from client"; 
        char buffer[1024] = {0}; 
        if ((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0)  
        {   
                printf("\n Socket creation error \n"); 
                return -1; 
        }   

        serv_addr.sin_family = AF_INET; 
        serv_addr.sin_port = htons(PORT); 
    
        // Convert IPv4 and IPv6 addresses from text to binary form 
        if(inet_pton(AF_INET, "127.0.0.1", &serv_addr.sin_addr)<=0) 
        {   
                printf("\nInvalid address/ Address not supported \n"); 
                return -1; 
        }   

        if (connect(sock, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0)  
        {   
                printf("\nConnection Failed \n"); 
                return -1; 
        }   
        send(sock , hello , strlen(hello) , 0 );  
        printf("Hello message sent\n"); 
        valread = read( sock , buffer, 1024); 
        printf("%s\n",buffer );  
        return 0;    
} 

server.c

#include <unistd.h>
#include <stdio.h>
#include <sys/socket.h>
#include <stdlib.h>
#include <netinet/in.h>
#include <string.h>
#define PORT 8080 

int main(int argc, char const *argv[])
{
        int server_fd, new_socket, valread;
        struct sockaddr_in address;
        int opt = 1;
        int addrlen = sizeof(address); 
        char buffer[1024] = {0}; 
        char *hello = "Hello from server"; 
    
        // Creating socket file descriptor 
        if ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) == 0)  
        {   
                perror("socket failed");
                exit(EXIT_FAILURE);
        }
        if (setsockopt(server_fd, SOL_SOCKET, SO_REUSEADDR , &opt, sizeof(opt)))
        // Forcefully attaching socket to the port 8080 
        {
                perror("setsockopt");
                exit(EXIT_FAILURE);
        }
        address.sin_family = AF_INET;
        address.sin_addr.s_addr = INADDR_ANY;
        address.sin_port = htons( PORT );

        // Forcefully attaching socket to the port 8080 
        if (bind(server_fd, (struct sockaddr *)&address,
                                                                sizeof(address))<0)
        {
                perror("bind failed");
                exit(EXIT_FAILURE);
        }
        if (listen(server_fd, 3) < 0)
        {
                perror("listen");
                exit(EXIT_FAILURE);
        }
        if ((new_socket = accept(server_fd, (struct sockaddr *)&address,
                                        (socklen_t*)&addrlen))<0)
        {
                perror("accept");
                exit(EXIT_FAILURE);
        }
        valread = read( new_socket , buffer, 1024);
        printf("%s\n",buffer );
        send(new_socket , hello , strlen(hello) , 0 );
        printf("Hello message sent\n");
        return 0;
}

我也尝试过使用 recv 而不是 read 并且同样的问题仍然存在。 预先感谢您的帮助!

0 个答案:

没有答案