Hi I have this assignment that I'm modifying for a client-server. The client will send fifty strings, from a preset list of 3. The server will parse these sentences and display the first sentence in red, the second in black, and the third in blue. This is what I have so far, just wasn't sure how to output this in the right format with the colors
#include <stdio.h>
#include <winsock2.h>
#include <stdlib.h>
#define MYBUFSIZE 128
void shutdown_close(SOCKET s)
{
shutdown(s, SD_BOTH);
closesocket(s);
}
void shutdown_close_and_exit(SOCKET s)
{
shutdown_close(s);
exit(1);
}
void main(int argc, char *argv[])
{
SOCKET srvr_socket, clnt_socket;
struct sockaddr_in srvr_addr;
struct sockaddr_in clnt_addr; int addr_len = 0;
WSADATA wsaData;
char recv_buf[MYBUFSIZE];
int recv_msg_len;
short portnum;
DWORD WINAPI runThread(LPVOID args);
HANDLE hThread;
DWORD threadId;
if (argc == 2)
{
portnum = atoi(argv[1]);
printf("Setting port number to %d\n", portnum);
} else
{
fprintf(stderr, "Usage: %s port_num_to_listen_at\n",
argv[0]);
exit(1);
}
if (WSAStartup(MAKEWORD(2, 0), &wsaData) != 0)
{
fprintf(stderr, "Error: WSAStartup() failed");
exit(1);
}
if ((srvr_socket = socket(AF_INET, SOCK_STREAM, 0) < 0) == SOCKET_ERROR)
{
fprintf(stderr, "Error: socket() failed with error %d\n", WSAGetLastError());
shutdown_close_and_exit(srvr_socket);
}
memset(&srvr_addr, 0, sizeof(srvr_addr));
srvr_addr.sin_family = AF_INET;
srvr_addr.sin_addr.s_addr = INADDR_ANY; srvr_addr.sin_port = htons(portnum);
if (bind(srvr_socket, (struct sockaddr *) &srvr_addr, sizeof(srvr_addr)) == SOCKET_ERROR)
{
fprintf(stderr, "Error: socket() failed with error %d", WSAGetLastError());
shutdown_close_and_exit(srvr_socket);
}
listen(srvr_socket,10);
{
return;
}
for (;;)
{
addr_len = sizeof(clnt_addr);
clnt_socket = accept(srvr_socket,(struct sockaddr*)&clnt_addr,&addr_len);
hThread = CreateThread( NULL, 0, runThread, &clnt_addr, 0, &threadId);
int r;
for(int i=0; i < 51; i++)
{
r = rand() % 3 + 1;
if (r == 1)
printf ("The King is Dead!");
else if (r == 2)
printf ("Long Live the King!");
else if (r == 3)
printf ("Elvis is the King of Rock!");
}
if ((recv_msg_len = recvfrom(srvr_socket, recv_buf, MYBUFSIZE, 0,
(struct sockaddr *) &clnt_addr, &addr_len )) == SOCKET_ERROR) {
fprintf(stderr, "Error: recvfrom() failed with error %d\n", WSAGetLastError());
shutdown_close_and_exit(srvr_socket);
} else {
printf("Received message of size %d: %s\n from client %s:%d\n",
recv_msg_len, recv_buf, inet_ntoa(clnt_addr.sin_addr),
ntohs(clnt_addr.sin_port));
}
if ((recv_msg_len = sendto(srvr_socket, recv_buf, recv_msg_len, 0,
(struct sockaddr *) &clnt_addr, addr_len )) == SOCKET_ERROR) {
fprintf(stderr, "Error: sendto() failed with error %d\n", WSAGetLastError());
shutdown_close_and_exit(srvr_socket);
shutdown_close_and_exit(clnt_socket);
} else {
printf("Echo'd message %s to client %s:%d\n",
recv_buf, inet_ntoa(clnt_addr.sin_addr),
ntohs(clnt_addr.sin_port));
}
}
}