rendered paste body#pragma comment(lib, "ws2_32")
#include <windows.h>
#include <winsock.h>
#include <stdio.h>
typedef struct ClientPack{
char *szIP;
SOCKET sSocket;
}CLIENTPACK, *PCLIENTPACK;
DWORD WINAPI Handler(LPVOID lpParam);
int main(int argc, char **argv)
{
int nPort = 0;
printf("Enter listen port: ");
scanf("%i", &nPort);
MessageBeep(MB_ICONERROR);
WSADATA wsaData;
if(WSAStartup(MAKEWORD(2, 0), &wsaData) != 0){
WSACleanup();
printf("\n\n[1] Failed to Initialize winsock!\n\n");
getchar();
return -1;
}
printf("\n\n[1] Initiated Winsock...\n\n");
SOCKET sListen = NULL;
if((sListen = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == INVALID_SOCKET){
WSACleanup();
printf("[2] Failed to create socket!\n\n");
getchar();
return -1;
}
SOCKADDR_IN SockInfo;
SockInfo.sin_addr.s_addr = INADDR_ANY;
SockInfo.sin_family = AF_INET;
SockInfo.sin_port = htons(nPort);
if(bind(sListen, (SOCKADDR*)&SockInfo, sizeof(SockInfo)) == SOCKET_ERROR){
printf("[3] Failed to bind socket!\n\n");
closesocket(sListen);
WSACleanup();
getchar();
return -1;
}
printf("[3] Socket bound!\n\n");
if(listen(sListen, SOMAXCONN) == SOCKET_ERROR){
printf("[4] Failed to listen on given port!\n\n");
closesocket(sListen);
WSACleanup();
getchar();
return -1;
}
printf("[4] Now listening on port %d!\n\n", nPort);
while(TRUE){
Sleep(10);
SOCKET sClient = NULL;
sockaddr_in RemoteInfo;
int nRemoteInfoSize = sizeof(RemoteInfo);
if(sClient = accept(sListen, (sockaddr*)&RemoteInfo, &nRemoteInfoSize) != INVALID_SOCKET){
printf("New Connection: %s\n", inet_ntoa(RemoteInfo.sin_addr));
CLIENTPACK ClientPack;
ClientPack.sSocket = sClient;
ClientPack.szIP = inet_ntoa(RemoteInfo.sin_addr);
CreateThread(0, NULL, (LPTHREAD_START_ROUTINE)&Handler, (void*)&ClientPack, NULL, NULL);
}
}
return 0;
}
DWORD WINAPI Handler(LPVOID lpParam)
{
PCLIENTPACK ClientPack = (PCLIENTPACK)lpParam;
char *szRcvBuff = (char*)malloc(1024*1024);
do{
recv(ClientPack->sSocket, szRcvBuff, strlen(szRcvBuff), 0);
}while(strstr(szRcvBuff, "\r\n\r\n") == NULL);
char szSend[] = "HTTP/1.0 200 OK\r\nContent-Type:text/html\r\nContent-Length:10\r\n\r\n<html>\r\n<title>Arizona</title>\r\n\r\n</html>";
send(ClientPack->sSocket, szSend, sizeof(szSend), 0);
return 0;
}