Code:
#include <winsock.h>
#include <stdio.h>
const char ServerName[] = "dict.org";
const unsigned short PortNumber = 2628;
const unsigned short BufferSize = 6144;
const char InitialResponse[] = "220";
const char QuitResponse[] = "221";
const char QuitCommand[] = "QUIT\r\n";
const char DefineResponse[] = "150";
const char DefinitionResponse[] = "151";
const char FinishedResponse[] = "250";
const char DefineCommand[] = "DEFINE";
int main(int argumentcount, char ** arguments)
{
WSADATA winsock;
WSAStartup(MAKEWORD(2,0), &winsock);
SOCKET client = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
LPHOSTENT host = gethostbyname(ServerName);
SOCKADDR_IN address = {AF_INET, htons(PortNumber), *((LPIN_ADDR)*host->h_addr_list)};
connect(client, (LPSOCKADDR)(&address), sizeof(address));
char * commandBuffer = (char *)malloc(BufferSize);
char * responseBuffer = (char *)malloc(BufferSize);
char * command = commandBuffer;
char * response = responseBuffer;
recv(client, response, BufferSize, 0);
memcmp(response, InitialResponse, sizeof(InitialResponse) - 1);
sprintf(command, "%s ! %s\r\n", DefineCommand, arguments[1]);
send(client, command, strlen(command), 0);
recv(client, response, BufferSize, 0);
memcmp(response, DefineResponse, sizeof(DefineResponse) - 1);
unsigned int definitionCount = atoi(response + 4);
recv(client, response, BufferSize, 0);
char * delimiter = strstr(response, "\r\n.\r\n250");
char * definition = (char *)malloc(BufferSize);
delimiter = strstr(response, "\r\n");
snprintf(definition, BufferSize, "%s", delimiter + 2);
delimiter = strstr(definition, "\r\n.\r\n");
*delimiter = 0;
printf("%s\n", definition);
delimiter = strstr(response, "\r\n.\r\n") + 5;
response = delimiter;
free(definition);
memcmp(response, FinishedResponse, sizeof(FinishedResponse) - 1);
response = responseBuffer;
send(client, QuitCommand, sizeof(QuitCommand) - 1, 0);
recv(client, response, BufferSize, 0);
memcmp(response, QuitResponse, sizeof(QuitResponse) - 1);
free(commandBuffer);
free(responseBuffer);
closesocket(client);
WSACleanup();
return(0);
}