posts - 496,comments - 227,trackbacks - 0
  void   CNetRecvDlg::OnButton1()    
  {  
          CString   szIP;  
          GetDlgItem(IDC_EDIT1)->GetWindowText(szIP);  
          struct   sockaddr_in   sin;  
          WSADATA   wsaData;          
          SOCKET   sockClient;  
          int   IpPort;  
          char   *IpAddr;  
          IpAddr=szIP.GetBuffer(szIP.GetLength());  
          IpPort=800;  
           
          if(WSAStartup(0x0101,   &wsaData   ))  
          {  
                  AfxMessageBox("初始化   TCP/IP   协议栈发生错误!");  
                  return;  
          }  
          if(wsaData.wVersion   !=   0x0101)  
          {  
                  AfxMessageBox("Winsock   version   is   incorrect!");  
                  WSACleanup();  
                  return;  
          }  
           
          if   ((sockClient   =   socket   (PF_INET,   SOCK_STREAM,   IPPROTO_IP))   ==   INVALID_SOCKET)  
          {  
                  AfxMessageBox("Create   socket   error!");  
                  return;  
          }  
           
           
          sin.sin_family=AF_INET;  
          sin.sin_addr.s_addr=inet_addr(IpAddr);  
          sin.sin_port=htons((short)IpPort);  
           
           
          int   timeout=300;    
          int   status=setsockopt(sockClient,SOL_SOCKET,SO_RCVTIMEO,(char*)&timeout,sizeof(timeout));          
          if(status)  
          {  
                  MessageBox("设置超时错误");  
                  WSACleanup();  
                  return   ;  
          }  
          int   buf=10240;  
          int   status2=setsockopt(sockClient,SOL_SOCKET,SO_RCVBUF,(char*)&buf,sizeof(int));  
          if(status2)  
          {  
                  MessageBox("设置缓冲区大小错误");  
                  WSACleanup();  
                  return   ;  
          }  
           
           
          if(connect   (sockClient,   (struct   sockaddr   *)&sin,   sizeof   (sin))   ==   SOCKET_ERROR)  
          {  
 MessageBox("连接错误");  
                  closesocket(sockClient);  
                  WSACleanup();  
                  return;  
          }  
          else{  
                  WIN32_FIND_DATA   fd;  
                  ::Sleep(20);  
                  recv(sockClient,(char*)&fd,sizeof(WIN32_FIND_DATA),0);  
                  ////////////////////////////////////////////////////////  
                  //PROGRESS  
                  m_Progress.SetRange(0,(short)fd.nFileSizeLow);    
                  m_Progress.SetPos(0);  
                  m_Progress.SetStep(1);  
                  ////////////////////////////////////////////////////  
                  CString   m_ProDir="e:""";  
                  CFile   destFile(m_ProDir+fd.cFileName,   CFile::modeCreate   |   CFile::modeWrite   |   CFile::typeBinary);  
                  UINT   dwRead   =   0;  
                  while(dwRead<fd.nFileSizeLow)  
                  {  
                          byte*   data   =   new   byte[2048];  
                          memset(data,0,2048);  
                          UINT   dw=recv(sockClient,(char*)data,2048,0);  
                          destFile.Write(data,   dw);  
                          dwRead+=dw;  
                          delete   []   data;  
                          m_Progress.StepIt();  
                  }  
                  m_Progress.SetPos((short)fd.nFileSizeLow);    
                  SetFileTime((HANDLE)destFile.m_hFile,&fd.ftCreationTime,  
                          &fd.ftLastAccessTime,&fd.ftLastWriteTime);  
                  SetFileAttributes(m_ProDir+fd.cFileName,fd.dwFileAttributes);  
                  destFile.Close();  
                  closesocket   (sockClient);  
          WSACleanup();  
          }  
  } 

***********************************************************************************************
#include   "afxmt.h"  
  CString   m_PATH;  
  DWORD   filesize;  
  HWND   hwnd_p;  
  int   IsBegin;  
   
   
  void   CNetSendDlg::OnTransfer(CString   m_PATH)  
  {  
   
  }  
   
   
   
  UINT   CNetSendDlg::ThreadA(LPVOID   pParam)  
  {  
          IsBegin=0;  
          CFile   myFile;  
          if(!myFile.Open(m_PATH,   CFile::modeRead   |   CFile::typeBinary|CFile::shareDenyNone))  
          {  
                  return   0;  
          }  
   
          CString   szIP;  
          struct   sockaddr_in   sin;  
          WSADATA   wsaData;          
          SOCKET   sockSrvr,sockRecv;  
          char   *IpAddr;  
          if(WSAStartup(0x0101,   &wsaData   ))  
          {  
                  AfxMessageBox("初始化   TCP/IP   协议栈发生错误!");  
                  return   0;  
          }  
          if(wsaData.wVersion   !=   0x0101)  
          {  
                  AfxMessageBox("Winsock   version   is   incorrect!");  
                  WSACleanup();  
                  return   0;  
          }  
           
          if   ((sockSrvr   =   socket   (PF_INET,   SOCK_STREAM,   IPPROTO_IP))   ==   INVALID_SOCKET)  
          {  
                  AfxMessageBox("Create   socket   error!");  
                  return   0;  
          }  
   
          if   ((sockRecv   =   socket   (PF_INET,   SOCK_STREAM,   IPPROTO_IP))   ==   INVALID_SOCKET)  
          {  
                  AfxMessageBox("Create   socket   error!");  
                  return   0;  
          }  
          //////////////////////////////////////  
                      CString   m_addr;  
                      CString   m_strT;  
                      CString   sNetBiosName;  
                      char   hostname[128];  
                      struct   hostent   *phost;  
                      gethostname(hostname,128);  
                      m_addr   =   hostname;  
                      phost   =   gethostbyname(hostname);  
                      int   m_iCounter=0;  
                      for(int   j   =   0;j<4;j++)  
                      {  
                               
                              m_strT.Format("%u",   (unsigned   int)((unsigned   char*)phost->h_addr_list[0])[j]);  
                              sNetBiosName+=m_strT;  
                              if(m_iCounter<3)  
                              {  
                                      m_iCounter++;  
                                      sNetBiosName+=".";  
                              }      
                      }          
          //////////////////////////////////////  
          szIP=sNetBiosName;  
          IpAddr=szIP.GetBuffer(szIP.GetLength());  
          sin.sin_family=AF_INET;  
          sin.sin_addr.s_addr=inet_addr(IpAddr);  
          sin.sin_port=htons(800);  
          if(bind(sockSrvr,(sockaddr*)&sin,sizeof(sin))<0)  
          {  
                  AfxMessageBox("绑定错误");  
                  return   0;  
          }  
          listen(sockSrvr,20);  
          int   length=sizeof(sin);  
          sockRecv=accept(sockSrvr,(struct   sockaddr*)&sin,&length);  
           
          int   timeout=300;    
          int   status=setsockopt(sockRecv,SOL_SOCKET,SO_RCVTIMEO,(char*)&timeout,sizeof(timeout));          
          if(status)  
          {  
                  AfxMessageBox("设置超时错误");  
                  WSACleanup();  
                  return   0;  
          }  
          int   buf=10240;  
          int   status2=setsockopt(sockRecv,SOL_SOCKET,SO_RCVBUF,(char*)&buf,sizeof(int));  
          if(status2)  
          {  
                  AfxMessageBox("设置缓冲区大小错误");  
                  WSACleanup();  
                  return   0;  
          }  
          //////////////////////////////////////////////////////////////////          
          WIN32_FIND_DATA                           FindFileData;  
          FindClose(FindFirstFile(m_PATH,&FindFileData));  
              send(sockRecv,(char*)&FindFileData,sizeof(WIN32_FIND_DATA),0);  
          ////////////////////////////////////////////////////////  
          //PROGRESS  
          filesize=(short)FindFileData.nFileSizeLow;    
          ::PostMessage(hwnd_p,WM_USER_PROG,NULL,NULL);  
          ////////////////////////////////////////////////////  
          UINT   dwRead=0;  
          byte*   data;  
          while(dwRead<FindFileData.nFileSizeLow)  
          {  
                  data   =   new   byte[2048];  
                  UINT   dw=myFile.Read(data,   2048);  
                  send(sockRecv,(char*)data,2048,0);  
                  dwRead+=dw;  
                  delete   []   data;  
                  IsBegin=1;  
                  ::PostMessage(hwnd_p,WM_USER_PROG,NULL,NULL);  
          }  
          IsBegin=2;  
          //::PostMessage(hwnd_p,WM_USER_PROG,NULL,NULL);  
   
          myFile.Close();  
          closesocket(sockRecv);  
          closesocket(sockSrvr);  
          WSACleanup();  
   
          return   0;  
  }  
   
  LRESULT   CNetSendDlg::OnProgress(WPARAM   wParam,   LPARAM   lParam)  
  {  
          CString   st;  
          st.Format("%d",filesize);  
   
          if(IsBegin==0)  
          {  
          m_Progress.SetRange(0,(short)filesize/1000);    
          m_Progress.SetPos(0);  
          m_Progress.SetStep(1);  
          }  
          else   if(IsBegin==1)  
          {  
          m_Progress.StepIt();  
          }  
          else   if(IsBegin==2)  
          {  
                  m_Progress.SetPos((short)filesize/1000);  
          }  
   
          return   0;  
   
  }  
   
  static   char   BASED_CODE   szFilter[]="|*.*|";  
  void   CNetSendDlg::OnButton1()    
  {  
  OPENFILENAME         ofn   ;  
          TCHAR     szFullName[_MAX_PATH];  
          ::ZeroMemory   (&ofn,   sizeof(OPENFILENAME))   ;  
          szFullName[0]   =   TEXT('"0')   ;  
          ofn.lStructSize               =   sizeof   (OPENFILENAME)   ;  
          ofn.hwndOwner                   =   m_hWnd;  
          ofn.hInstance                   =   NULL   ;  
          ofn.lpstrFilter               =   "*.txt"0"0"   ;  
          ofn.lpstrCustomFilter   =   NULL   ;  
          ofn.nMaxCustFilter         =   0   ;  
          ofn.nFilterIndex             =   0   ;  
          ofn.nMaxFile                     =   MAX_PATH   ;  
          ofn.nMaxFileTitle           =   MAX_PATH   ;  
          ofn.lpstrInitialDir       =   "c:"""   ;  
          ofn.lpstrTitle                 =   "保存到";  
          ofn.lpstrFile                     =   szFullName   ;  
          ofn.nFileExtension         =   0   ;  
          ofn.lpstrDefExt               =   TEXT("txt")   ;  
          ofn.lCustData                   =   0   ;  
          ofn.lpfnHook                     =   NULL   ;  
          ofn.lpTemplateName         =   NULL   ;  
          ofn.Flags                           =   OFN_ENABLESIZING   |   OFN_OVERWRITEPROMPT   ;  
           
           
          if(!::GetOpenFileName(&ofn))  
                  return;  
      GetDlgItem(IDC_EDIT1)->SetWindowText(ofn.lpstrFile);  
           
  }  
   
  void   CNetSendDlg::OnButton2()    
  {  
  //         m_PATH="c:""1.jpg";  
          GetDlgItem(IDC_EDIT1)->GetWindowText(m_PATH);  
   
          hwnd_p=this->m_hWnd;  
          AfxBeginThread(ThreadA,NULL,THREAD_PRIORITY_IDLE);  
  }  
 
posted on 2008-07-03 15:39 SIMONE 阅读(1100) 评论(0)  编辑  收藏 所属分类: C++

只有注册用户登录后才能发表评论。


网站导航: