#include #include #include #include #include int32_t sqw; int32_t sqc; void* client_interaction(int cfd){ char type; for(;;){ if(read(cfd, &type, 1) != 1) break; if(type == 'N'){ int32_t weight; read(cfd, &weight, 4); sqc++; sqw += weight; type = 'A'; write(cfd, &type, 1); // This is tempting, but doesn't work: // write(cfd, 65, 1); // This does: // write(cfd, "A", 1); } else if(type == 'Q') { type = 83; write(cfd, &type, 1); write(cfd, &sqc, 4); int32_t average = sqw / sqc; write(cfd, &average, 4); } else break; } close(cfd); } int main(){ int skt = socket(AF_INET, SOCK_STREAM, 0); struct sockaddr_in sad; sad.sin_port = htons(5100); sad.sin_family = AF_INET; sad.sin_addr.s_addr = 0; bind(skt, (struct sockaddr*)&sad, sizeof(sad)); listen(skt, 5); for(;;){ int cfd = accept(skt, 0, 0); // start the client's thread pthread_t t; pthread_create(&t, 0, (void*(*)(void*)) client_interaction, (void*)(long int)cfd); } close(skt); return 0; }