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;
}