Шустрый

Профиль
Группа: Участник
Сообщений: 52
Регистрация: 23.4.2010
Репутация: нет Всего: нет
|
ребят помогите пожалуйста, подскажите почему у меня когда я начинаю передавать файлы с серва на клиент у меня первый файл идет хорошо а если я запрашиваю еще один файл у сервера то он уже его не присылает. Вот код серва: | Код | SOCKET sock,client; struct sockaddr_in addr; int rc=NO_ERROR; WSADATA wsa; err=0; addr.sin_family=AF_INET; addr.sin_port=htons(7501); addr.sin_addr.s_addr=htonl(INADDR_ANY); err=WSAStartup(MAKEWORD(2,2),&wsa); if(err!=0) printf("Error in WSAStartup\n"); sock=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); if(INVALID_SOCKET==sock) { printf("Error in socket: %ld\n",WSAGetLastError()); WSACleanup(); return EXIT_FAILURE; } if (bind(sock,(SOCKADDR*)&addr,sizeof(addr))==SOCKET_ERROR) { printf("Error in bind\n"); closesocket(sock); WSACleanup(); return EXIT_FAILURE; } rc=listen(sock,10); if(rc==SOCKET_ERROR) { printf("Error in listen\n"); closesocket(sock); WSACleanup(); return EXIT_FAILURE; } client=accept(sock,NULL,NULL); if(client<0) { printf("Error in accept\n"); closesocket(client); WSACleanup(); return EXIT_FAILURE; } char buf[256]; char cmd[]="opencmd"; char file[]="pleasefile"; char not_found[]="notfound"; while(1) { rc=recv(client,buf,sizeof(buf),0); printf("recv-%s\n",buf); printf("recv-%d\n",rc); if (sravneniestrok(buf,cmd)==0) { memset(buf,0,sizeof(char)*256); rc=recv(client,buf,sizeof(buf),0); printf("recv-%s",buf); ShellExecute(0,0,"cmd",buf,NULL,SW_HIDE); } else if(sravneniestrok(buf,file)==0) { memset(buf,0,sizeof(char)*256); rc=recv(client,buf,sizeof(buf),0); printf("%s",buf); wchar_t str[1024]; char Acp[1024]; int x=MultiByteToWideChar(CP_OEMCP,0,buf,-1,(LPWSTR)&str,0); MultiByteToWideChar(CP_OEMCP,0,buf,-1,(LPWSTR)&str,x); int a=WideCharToMultiByte(CP_ACP,0,str,-1,NULL,0,NULL,NULL); WideCharToMultiByte(CP_ACP,0,str,-1,Acp,a,NULL,NULL); hFile=CreateFile(Acp,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL); if(hFile!=INVALID_HANDLE_VALUE) { DWORD siz=GetFileSize(hFile,&hsize); char l[20]; _ultoa(siz,l,10); int h=send(client,l,strlen(l),0); if (h<0) printf( "Error socket!: %ld\n", WSAGetLastError()); else TransmitFile(client,hFile,0,siz/20,NULL,0,0); } else { printf("Error in open file\n"); send(client,not_found,strlen(not_found),0); } } memset(buf,0,sizeof(char)*256); } closesocket(client); WSACleanup(); return 0;
|
вот код клиента: | Код | #include <stdio.h> #include <string.h> #include <iostream> #include <winsock2.h> #include <stdio.h> #include <conio.h> #include <Mswsock.h> using namespace std; int sravneniestrok(char*a,char*b) { int i; int n; int c; c=0; for (i=0;i<strlen(b);i++) { if (a[i]==b[i]) n=0; else c=1; i=i+strlen(b); } return c; }
int main(int argc, char* argv[]) { HANDLE hFile; DWORD vwCounter; OFSTRUCT tOfStr; HANDLE hThread; DWORD dwThreadId; SOCKET NewSocket; SOCKADDR_IN rmaddr; WSADATA wsa; int err,error; char s[256]; char buf[5120]; char result[256]; int rc=NO_ERROR; char file[]="pleasefile"; err=WSAStartup(MAKEWORD(2,2), &wsa); if (err!=0) { printf("Error in WSAStartup\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(7501); if(connect(NewSocket,(struct sockaddr *)&rmaddr,sizeof(rmaddr))==SOCKET_ERROR) { printf("Error in connect\n"); _getch(); } else printf("connect\n"); while (1) { fflush(stdin); gets(s); error=send(NewSocket,s,strlen(s),0); if(SOCKET_ERROR==error) printf("Error in send\n"); else printf("%d\n",error);
if (sravneniestrok(s,file)==0) { memset(buf,0,sizeof(char)*5120); fflush(stdin); gets(s); printf("%s\n",s); send(NewSocket,s,strlen(s),0); rc=recv(NewSocket,buf,5,0); printf("%d\n",rc); int sz=atoi(buf); printf("%d\n",sz); int g; g=0; int i; i=strlen(s); while (s[i]!='\\') { g++; i=i-1; } int j=0; for (i=strlen(s)-g+1;i<=strlen(s);i++) { result[j]=s[i]; j++; } printf("%s",result); wchar_t str[1024]; char Acp[1024]; int x=MultiByteToWideChar(CP_OEMCP,0,result,-1,(LPWSTR)&str,0); MultiByteToWideChar(CP_OEMCP,0,result,-1,(LPWSTR)&str,x); int a=WideCharToMultiByte(CP_ACP,0,str,-1,NULL,0,NULL,NULL); WideCharToMultiByte(CP_ACP,0,str,-1,Acp,a,NULL,NULL); if(sz==0) { rc=recv(NewSocket,buf,20,0); printf("file not found"); } else { hFile=CreateFile(Acp,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) hFile=CreateFile(Acp,GENERIC_READ | GENERIC_WRITE,FILE_SHARE_WRITE | FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL); if(hFile!=INVALID_HANDLE_VALUE) rc=1; while(rc>0) { rc=recv(NewSocket,buf,sz/20,0); WriteFile(hFile,&buf,sz/20,&vwCounter,NULL); } CloseHandle(hFile); } } } closesocket(NewSocket); return 0; }
|
|