Загрузка процессора ~30%, ядро ~28 %.
#include "stdafx.h"
#include <stdio.h>
#include "winsock2.h"
#include "Ws2tcpip.h"
int _tmain(int argc, _TCHAR* argv[])
{
WSADATA wsaData;
SOCKET SendSocket;
sockaddr_in RecvAddr, source_sin;
char SendBuf[1469];
int BufLen = 1469;
int iOptVal = 64;
int iOptLen = sizeof(int);
int ret, nLeft;
DWORD nBytesRead, nBytesToRead = 1024;
WSAStartup(MAKEWORD(2,2), &wsaData);
SendSocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
source_sin.sin_family = AF_INET;
source_sin.sin_port = htons (0);
source_sin.sin_addr.s_addr = htonl (INADDR_ANY);
bind (SendSocket, (SOCKADDR*) &source_sin, sizeof (source_sin));
setsockopt (SendSocket, IPPROTO_IP, IP_MULTICAST_TTL, (char*)&iOptVal, iOptLen);
RecvAddr.sin_family = AF_INET;
RecvAddr.sin_port = htons(4567);
RecvAddr.sin_addr.s_addr = inet_addr ("225.6.7.8");
HANDLE hFile;
hFile = CreateFile("D:\\Games\\Far Cry\\FCData\\Textures.pak", GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
nLeft = GetFileSize(hFile, NULL);
nBytesRead = htonl(nLeft);
nBytesToRead = 4;
ret = sendto(SendSocket,
(char*)&nBytesRead,
nBytesToRead,
0,
(SOCKADDR *) &RecvAddr,
sizeof(RecvAddr));
while (nLeft > 0)
{
ReadFile(hFile, SendBuf, nBytesToRead, &nBytesRead, NULL) ;
ret = sendto(SendSocket,
SendBuf,
BufLen,
0,
(SOCKADDR *) &RecvAddr,
sizeof(RecvAddr));
nLeft -= ret;
}
CloseHandle(hFile);
shutdown(SendSocket, 0x01);
closesocket(SendSocket);
printf("Exiting.\n");
WSACleanup();
}
---
|