Регистрация: 03.12.2014
Сообщений: 6
|
Передача файла сервер клиент
у меня есть код, который передает файлы из клиента на сервер, помогите переделать так чтобы сервер передавал файл, а клиент принимал!
вот код для клиента, который передает файл:
Код:
DWORD WINAPI NetworkThread_f(LPVOID)
{WSADATA wsaData;
int result = WSAStartup(MAKEWORD(2, 2), &wsaData);
if (result != 0)
{MessageBox(NULL, _T("Ошибка инициализации WinSock."), szTitle, MB_ICONERROR | MB_OK);
return 1;}
// Откроем клиентский сокет.
struct addrinfo *res = NULL, *ptr = NULL, hints;
// Заполним структуру hints, содержащую параметры клиентского сокета.
ZeroMemory(&hints, sizeof(hints));
// Адресная семья (для клиентского сокета можно не указывать).
hints.ai_family = AF_INET;
hints.ai_socktype = SOCK_STREAM;
int nLen = GetWindowTextLength(hwndE1);
LPTSTR lpText =(LPTSTR)HeapAlloc( GetProcessHeap(),HEAP_ZERO_MEMORY, nLen+1 ) ;
if ( lpText ){
GetWindowText(hwndE1, lpText, nLen+1 );
nLen= WideCharToMultiByte(CP_ACP,0,lpText,_tcslen(lpText),server_ip,nLen+1,0,0);
}
server_ip[nLen]='\0';
result = getaddrinfo(server_ip, "9999", &hints, &res);
if (result != 0)
{
MessageBox(NULL, _T("Ошибка преобразования порта."),szTitle, MB_ICONERROR | MB_OK);
WSACleanup();
return 1;
}
// Создаём сокет.
SOCKET client_socket = socket(res->ai_family, res->ai_socktype, res->ai_protocol);
if (client_socket == INVALID_SOCKET)
{
MessageBox(NULL, _T("Ошибка создания сокета."), szTitle, MB_ICONERROR | MB_OK);
freeaddrinfo(res);
WSACleanup();
//SendError();
return 1;
}
// После создания клиентский сокет необходимо подключить (connect) к серверу.
result = connect(client_socket, res->ai_addr, (int)res->ai_addrlen);
if (result == SOCKET_ERROR || client_socket == INVALID_SOCKET)
{
MessageBox(NULL, _T("Невозможно подключиться к серверу."), szTitle, MB_ICONERROR | MB_OK);
freeaddrinfo(res);
return 1;
}
// После вызова connect() переменная res нам больше не нужна.
freeaddrinfo(res);
res = NULL;
// Уведомляем окно о том, что подключение к серверу завершено.
SendMessage(hWnd, WM_CONNECTED, 0, 0);
// Теперь мы можем передавать и принимать данные, используя клиентский сокет.
unsigned int size, size2;
char data[1000];
char *data2;
data2 = new char[600000];
// strcpy(data,"Restart.txt");
//strcpy(data2,"cat.jpg");
nLen = GetWindowTextLength(hwndE2);
lpText =(LPTSTR)HeapAlloc( GetProcessHeap(),HEAP_ZERO_MEMORY, nLen+1 ) ;
if ( lpText )
{
GetWindowText(hwndE2, lpText, nLen+1 );
nLen= WideCharToMultiByte(CP_ACP,0,lpText,_tcslen(lpText),data,nLen+1,0,0);
}
data[nLen]='\0';
size=strlen(data);
if(Find_file(data,data2,size2))
{
if (send(client_socket, (char*)&size, sizeof(int), 0) == SOCKET_ERROR ||
send(client_socket, data, size, 0) == SOCKET_ERROR ||
send(client_socket, (char*)&size2, sizeof(int), 0) == SOCKET_ERROR ||
send(client_socket, data2, size2, 0) == SOCKET_ERROR)
{
return 1;
}
}
// Отключаемся.
result = shutdown(client_socket, SD_RECEIVE);
if (result == SOCKET_ERROR)
{
MessageBox(NULL, _T("Ошибка выключения клиентского сокета."), szTitle, MB_ICONERROR | MB_OK);
closesocket(client_socket);
WSACleanup();
return 1;
}
SendMessage(window, WM_FINISHED, 0, 0);
return 0;
}
Последний раз редактировалось Stilet; 10.12.2014 в 20:08.
|