#include #include #include #include "server00.h" #include "data.h" #define PORT 40000 #define BUFFER_SIZE 1024 int main() { // load_file(); WSADATA WSAData; SOCKET client; SOCKADDR_IN serverAddr, clientAddr; WSAStartup(MAKEWORD(2,0), &WSAData); SOCKET server = socket(AF_INET, SOCK_STREAM, 0); serverAddr.sin_addr.s_addr = INADDR_ANY; serverAddr.sin_family = AF_INET; serverAddr.sin_port = htons(PORT); bind(server, (SOCKADDR *)&serverAddr, sizeof(serverAddr)); listen(server, 0); printf("Listening for incoming connections...\n"); int clientAddrSize = sizeof(clientAddr); int connection_number = 0; char_array_t *reply = char_array_create(1024); while((client = accept(server, (SOCKADDR *)&clientAddr, &clientAddrSize)) != INVALID_SOCKET) { struct EchoArgs *args = malloc(sizeof(struct EchoArgs)); args->client = client; args->connection = connection_number++; pthread_t thread; pthread_create(&thread, nullptr, echo,(void *) args); } } void *echo(void *args) { const auto echoArgs = (struct EchoArgs *) args; char buffer[BUFFER_SIZE] = {0}; char_array_t *reply = char_array_create(BUFFER_SIZE); int bytesReceived; int bytesTotal = 0; while ((bytesReceived = recv(echoArgs->client, buffer, sizeof(buffer), 0)) > 0) { // printf(" Client {%d} says: |%.1024s|\n", echoArgs->connection ,buffer); printf("Client sent {%d}: |%d| \n", echoArgs->connection, bytesReceived); char_array_append(reply, buffer, bytesReceived); bytesTotal += bytesReceived; memset(buffer, 0, sizeof(buffer)); Sleep(20); } printf("Total bytes received {%d}: %d\n", echoArgs->connection, bytesTotal); printf("Sending back {%d}: |%llu| \n", echoArgs->connection, reply->size); send(echoArgs->client, reply->data,reply->size,0); closesocket(echoArgs->client); free(echoArgs); return NULL; }