我的接收中断了我的发送

时间:2019-01-13 15:53:19

标签: c sockets networking tcp network-programming

我正在尝试制作一个在客户端和服务器之间使用套接字的程序。在下面的代码中,如果我在服务器收到消息时在循环上发表评论,但如果我不发表评论,则客户端似乎没有发送我的消息(最终我的服务器从未收到我的消息)。为什么?

服务器

int main()
{
    message = malloc(sizeof(char));
    printf("Waiting for incoming connections ...\n");
    sem_init(&lock, 0, 1);

    // socket creation
    int server_socket;
    server_socket = socket(AF_INET, SOCK_STREAM, 0);

    // dserver address9002
    struct sockaddr_in server_address;
    server_address.sin_family = AF_INET;
    server_address.sin_port = htons(PORT);
    server_address.sin_addr.s_addr = INADDR_ANY;

    // bind the socket to IP and port
    bind(server_socket, (struct sockaddr*) &server_address, sizeof(server_address));
    listen(server_socket, MAX_CONNECTIONS);

    int client_socket;
    int i = 0;
    while(client_counter < 2  && (client_socket = accept(server_socket, NULL,NULL)))
    {
        client_counter++;
        client_sockets[i] = client_socket;
        i++;
        printf("new client ! \n");
    }
    //here i create a thread for each client and in this thread there is a while loop with a recv function
}

客户

int socket_connection(char* ip, int port)
{
    int network_socket = 0;

    struct sockaddr_in server_address;
    server_address.sin_family = AF_INET;
    server_address.sin_port = htons(port);
    server_address.sin_addr.s_addr = inet_addr(ip);

    if ((network_socket = socket(AF_INET, SOCK_STREAM, 0)) < 0)
    {
        printf("\n Socket creation error \n");
        return -1;
    }

    int connection_status = connect(network_socket, (struct sockaddr*) &server_address, sizeof(server_address));

    if (connection_status < 0)
    {
        printf("Error while creating / connecting the socket");
        return -1;
    }

    return network_socket;
}

void connect_to_server()
{
    char ip[256];
    int port;

    strcpy(ip, "127.0.0.1");
    port = 9002;

    // try to connect to the server with the IP and port
    int network_socket = socket_connection(ip, port);

    char server_reponse[256];
    char message[256];
    // clean string
    memset(server_reponse, 0, sizeof(server_reponse));


    recv(network_socket, &server_reponse, sizeof(server_reponse), 0);

    if (strcmp(server_reponse, "instruction: make board") == 0)
    {
        construct_game_board();
        show_game_board();

        memset(message, 0, sizeof(message));
        put_ship(message);
        printf("Finish to make board\n");
    }


    printf("Reponse send to socket %d: %zu\n",network_socket, send(network_socket, message, strlen(message), 0));

    while (1) {
        printf("Before recv\n");
        printf("Reponse recv : %zu\n", recv(network_socket, server_reponse, sizeof(server_reponse), 0));
        printf("After recv\n");
}

在我启动控制台时,我有:Reponse send to socket 3: 0Before recv

0 个答案:

没有答案