Welcome toVigges Developer Community-Open, Learning,Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
114 views
in Technique[技术] by (71.8m points)

c - Loop client to server

I want to make a simple server-client with ubuntu c. What i am trying to achive is that the server will be a "eshop". It has 4 products as you can see. The client side will auto generate random numbers (0 to 3), send them to server and the server, check for availability and respond to client. So far so good, but i want to call client 5 times. Each time client orders 10 products. How can i approach it?

Server

#include <stdio.h>
#include <stdlib.h>

#include <sys/socket.h>
#include <sys/types.h>
#include <unistd.h>
#include <netinet/in.h>


struct items{
        char *description;
        int price;
        int item_count;
    };



int main(){




    //items
    struct items catalog[20];
        catalog[0].item_count = 2;
        catalog[0].description = "psigio";
        catalog[0].price = 100;
        catalog[1].item_count = 2;
        catalog[1].description = "thleorash";
        catalog[1].price = 150;
        catalog[2].item_count = 2;
        catalog[2].description = "kinito";
        catalog[2].price = 120;
        catalog[3].item_count = 2;
        catalog[3].description = "pc";
        catalog[3].price = 300;
        
    char server_message[256] = "you have reached the server!";
    char item_name[256];
    
    // create the server socket
    int server_socket;
    server_socket = socket(AF_INET, SOCK_STREAM, 0);
    
    printf("pending connection...");
    
    //define the server address
    struct sockaddr_in server_address;
    server_address.sin_family = AF_INET;
    server_address.sin_port = htons(9002);
    server_address.sin_addr.s_addr = INADDR_ANY;
    
    //bind the socket to our specified IP and port
    bind(server_socket, (struct sockaddr*) &server_address, sizeof(server_address));
    
    listen(server_socket, 0);
    
    
    int client_socket;
    client_socket = accept(server_socket, NULL, NULL);
    printf("Connection accepted
");
    printf("Listening...
");
    
    //send message to client
    send(client_socket, server_message, sizeof(server_message), 0);
    
    //recieve item and check
    int ran, stock;
    recv(client_socket, &ran, sizeof(ran), 0);
    printf("Server random: %d
", ran);
    if (catalog[ran].item_count>0){
        catalog[ran].item_count--;
        stock = 1;
    }else{
        stock =0;
    }
    send(client_socket, &stock, sizeof(stock), 0);
    send(client_socket, catalog[ran].description, sizeof(catalog[ran].description), 0);
    
    //close the socket
    close(server_socket);
    return 0;
}

Client

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <unistd.h>
#include <netinet/in.h>

int main(){

    //create a socket
    int network_socket;
    network_socket = socket(AF_INET, SOCK_STREAM, 0);
    
    //specify an address for the socket
    struct sockaddr_in server_address;
    server_address.sin_family = AF_INET;
    server_address.sin_port = htons(9002);
    server_address.sin_addr.s_addr = INADDR_ANY;
    
    int connection_status = connect(network_socket, (struct sockaddr *) &server_address, sizeof(server_address));
    //check for errors in connection
    if (connection_status == -1) {
        perror("Connection error: 
");
    }sleep(1);
    
    
    //recieve data from the server
    char server_response[256];
    recv(network_socket, &server_response, sizeof(server_response), 0);
    
    //print the server's response
    printf("the server send the data: %s
", server_response);
    
    //generate random numbers
    int random,stock;
    char test[256];

    srand(time(NULL));
    random = rand() %4;
    printf("client random: %d
", random);
    send(network_socket, &random, sizeof(random), 0);
    
    //recieve stock of item
    recv(network_socket, &stock, sizeof(stock), 0);
    recv(network_socket, &test, sizeof(test), 0);
    if (stock==1){
        printf("%s in stock
", test);
    }else{
        printf("%s item out of stock
", test);
    }
    
    //close the socket
    close(network_socket);
    
    return 0;



}

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

You can place your "generate random number & send to server & receive response" in a for loop !


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to Vigges Developer Community for programmer and developer-Open, Learning and Share
...