#include #include #if defined(_WIN32) #include #pragma comment(lib, "Ws2_32.lib") #define SD_SEND 1 #else #include #include #endif int main(int argc, char *argv[]) { char *server_message = "MESSAGE"; char client_message[2000] = { 0 }; #if defined(_WIN32) WSADATA wsaData; int iResult = WSAStartup(MAKEWORD(2,2), &wsaData); if (iResult != NO_ERROR) { printf("WSAStartup failed: %d\n", iResult); return 1; } #endif int socket_desc = socket(AF_INET, SOCK_STREAM, 0); if (socket_desc < 0) {printf("Could not create socket\n"); return 1;} struct sockaddr_in server_addr; server_addr.sin_family = AF_INET; server_addr.sin_port = htons(2000); server_addr.sin_addr.s_addr = inet_addr("127.0.0.1"); if (bind(socket_desc, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0) { printf("bind() failed\n"); return 1; } if (listen(socket_desc, 1) < 0) { printf("listen() failed\n"); return 1; } printf("Listening for incoming connections...\n"); struct sockaddr_in client_addr; int client_size = sizeof(client_addr); int client_sock = accept(socket_desc, (struct sockaddr*)&client_addr, &client_size); if (client_sock < 0) { printf("accept() failed\n"); return 1; } printf("Client connected: %s:%i\n", inet_ntoa(client_addr.sin_addr), ntohs(client_addr.sin_port)); if (recv(client_sock, client_message, sizeof(client_message), 0) < 0) { printf("recv() failed\n"); return -1; } printf("Client message: %s\n", client_message); printf("Sending message...\n"); if (send(client_sock, server_message, strlen(server_message), 0) < 0) { printf("send() failed\n"); return 1; } #if defined(_WIN32) if (argc > 1 && strcmp(argv[1], "shutdown") == 0) { printf("Calling shutdown()...\n"); shutdown(client_sock, SD_SEND); } if ((argc > 1 && strcmp(argv[argc - 1], "closesocket") == 0)) { printf("Calling closesocket()...\n"); closesocket(client_sock); } #endif printf("Exiting...\n"); return 0; }