Так что в настоящее время я пытаюсь написать код, в котором клиент отправляет код и номер на сервер, где сервер будет использовать этот код, чтобы выяснить, какое преобразование ему нужно сделать для числа. На данный момент у меня есть вся программа написана, но только для одного клиента. Как мне сделать это, где он принимает до 10 клиентов?
/* convserver2.cc
*
* Created by: Aaron Eiser
* 2/26/2020
*/
#include "socket.h"
#include "fdset.h"
#include <string.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/time.h>
#include <ctype.h>
#include <stdlib.h>
#include <signal.h>
void ctrlCHandler(int signal);
float conversion(unsigned char code, float value);
bool isValid(unsigned char code);
const unsigned char CONV_CODES[] = {0, 11, 12, 13, 14, 15, 16, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32};
const int LENGTH = 19;
const int MAX_CLIENTS = 10;
int clientSock[10];
int master_socket, new_socket, activity, valread, sd, max_sd;
ServerSocket theServer;
Socket *theClient = NULL;
// struct for packet
struct Packet{
float value;
char gap[3];
unsigned char code;
};
int main(int argc, char *argv[])
{
fd_sett readfds;
int port = atoi(argv[1]);
for(i = 0; i < MAX_CLIENTS; i++){
clientSock[i] = 0;
}
/* Bind the server listening socket to the given port. */
theServer.bind(port);
printf("Server bound to port #%d\n", port);
Packet data;
bool flags = true;
while(flags){
signal(SIGINT, ctrlCHandler);
theClient = theServer.accept();
printf("Connection made\n");
int size = theClient -> recv(&data, sizeof(Packet));
printf("Packet receieved\n");
while(size > 0 and data.code != 0){
Packet newData;
if(!isValid(data.code)){
fprintf(stderr, "Invalid code\n");
newData.code = 0;
newData.value = conversion(data.code, data.value);
theClient -> send(&newData, sizeof(Packet));
printf("Packet sent\n");
size = theClient -> recv(&data, sizeof(Packet));
printf("Packet received\n");
}
else{
newData.code = data.code;
newData.value = conversion(data.code, data.value);
theClient -> send(&newData, sizeof(Packet));
printf("%d %f \n", newData.code, newData.value);
printf("Packet sent\n");
size = theClient -> recv(&data, sizeof(Packet));
printf("Packet received\n");
}
}
theClient -> close();
delete theClient;
}
}
float conversion(unsigned char code, float value){
float newValue;
// Conv code 11
if(code == 11){
newValue = (value - 32) * (5.0 / 9.0);
printf("something\n");
}
// Conv code 12
else if(code == 12){
newValue = (value - 32) * (5.0 / 9.0) + 273.15;
}
// Conv code 13
else if(code == 13){
newValue = (value * (9.0 / 5.0)) + 32;
}
// Conv code 14
else if(code == 14){
newValue = value + 273.15;
}
// Conv code 15
else if(code == 15){
newValue = (value - 273.15) * (9.0 / 5.0) + 32;
}
// Conv code 16
else if(code == 16){
newValue = value - 273.15;
}
// Conv code 21
else if(code == 21){
newValue = value / 12.0;
}
// Conv code 22
else if(code == 22){
newValue = value / 36.0;
}
// Conv code 23
else if(code == 23){
newValue = value / 63360.0;
}
// Conv code 24
else if(code == 24){
newValue = value * 12.0;
}
// Conv code 25
else if(code == 25){
newValue = value / 3.0;
}
// Conv code 26
else if(code == 26){
newValue = value / 5280.0;
}
// Conv code 27
else if(code == 27){
newValue = value * 36.0;
}
// Conv code 28
else if(code == 28){
newValue = value * 3.0;
}
// Conv code 29
else if(code == 29){
newValue = value / 1760.0;
}
// Conv code 30
else if(code == 30){
newValue = value * 63360.0;
}
// Conv code 31
else if(code == 31){
newValue = value * 5280.0;
}
// Conv code 32
else if(code == 32){
newValue = value * 1760.0;
}
return newValue;
}
// Decides whether code is valid
bool isValid(unsigned char code){
for(int i = 0; i < LENGTH; i++){
if(code == CONV_CODES[i]){
return true;
}
}
return false;
}
// Catches Ctrl C
void ctrlCHandler(int signal){
if(theClient != NULL){
theClient -> close();
}
theServer.close();
exit(0);
}