您的位置:首页 > 其它

用浏览器浏览图片

2006-02-19 10:44 239 查看
[align=left]#include <windowsx.h>[/align]
[align=left]#include <Winsock2.h>[/align]
[align=left]#include<ShlObj.h>[/align]
[align=left]#include<assert.h>[/align]
[align=left]#include<io.h>[/align]
[align=left]#include<ctime>[/align]
[align=left]usingnamespace std;[/align]
[align=left]#include "resource.h"[/align]
[align=left]#pragmacomment(lib,"ws2_32")[/align]
[align=left] [/align]
[align=left]#define WM_SOCKET WM_USER +1024[/align]
[align=left] [/align]
[align=left] [/align]
[align=left]char g_szAllFileName[256][64];[/align]
[align=left]char g_szDirPath[256];[/align]
[align=left]int g_nFileCount=0;[/align]
[align=left]int g_nNext=0;[/align]
[align=left] [/align]
[align=left]LRESULT DlgProc(HWND hwnd,UINT uMessage,[/align]
[align=left] WPARAM wParam,LPARAM lParam);[/align]
[align=left]DWORD WINAPI ThreadProc(LPVOID lParam);[/align]
[align=left]SOCKET InitListenSock(UINT nPort);[/align]
[align=left]int InitDirFileName(char *szDirPath);[/align]
[align=left]int EnumAllFile(char *szDirPath);[/align]
[align=left] [/align]
[align=left]int WINAPI WinMain(IN HINSTANCE hInstance, IN HINSTANCE hPrevInstance,[/align]
[align=left] IN LPSTR lpCmdLine, IN int nShowCmd )[/align]
[align=left]{[/align]
[align=left] ::DialogBox(hInstance,LPCTSTR(IDD_MYDLG),[/align]
[align=left] NULL,DLGPROC(DlgProc));[/align]
[align=left]return TRUE;[/align]
[align=left]}[/align]
[align=left]LRESULT DlgProc(HWND hwnd,UINT uMessage,[/align]
[align=left] WPARAM wParam,LPARAM lParam)[/align]
[align=left]{[/align]
[align=left]static SOCKET listenSock;[/align]
[align=left]static WSADATA wsaData;[/align]
[align=left]static HANDLE pThread[64];[/align]
[align=left]static UINT nThreadCount=0;[/align]
[align=left]staticint len=sizeof(SOCKADDR_IN);[/align]
[align=left]static UINT uPort=5555;[/align]
[align=left]staticchar szDirPath[MAX_PATH];[/align]
[align=left]staticchar szGetBuf[1024];[/align]
[align=left]staticchar szIP[32];[/align]
[align=left]staticchar szPort[6];[/align]
[align=left]staticint nBufLen=0;[/align]
[align=left]static BROWSEINFO bi;[/align]
[align=left]static LPITEMIDLIST pidl;[/align]
[align=left] [/align]
[align=left] SOCKADDR_IN newSockaddr; [/align]
[align=left] SOCKET newAccept;[/align]
[align=left]switch(uMessage) {[/align]
[align=left]case WM_INITDIALOG:[/align]
[align=left][/align]
[align=left] srand((unsignedint)time(NULL));[/align]
[align=left] SetWindowText(GetDlgItem(hwnd,IDC_EDT_PORT),"5555");[/align]
[align=left][/align]
[align=left] SetWindowText(GetDlgItem(hwnd,IDC_EDT_FILEDIR),[/align]
[align=left] "F://NET"); [/align]
[align=left] SetWindowText(GetDlgItem(hwnd,IDC_EDT_IP),"http://127.0.0.1:5555");[/align]
[align=left] WSAStartup(MAKEWORD(2,2),&wsaData); [/align]
[align=left]return TRUE; [/align]
[align=left][/align]
[align=left]case WM_CLOSE: [/align]
[align=left] closesocket(listenSock);[/align]
[align=left] WSACleanup();[/align]
[align=left] EndDialog(hwnd,wParam);[/align]
[align=left] PostQuitMessage(0);[/align]
[align=left]return TRUE;[/align]
[align=left]case WM_COMMAND:[/align]
[align=left]switch(LOWORD(wParam))[/align]
[align=left] {[/align]
[align=left]case IDC_BT_CHOOSE: [/align]
[align=left] ZeroMemory(&bi,sizeof(bi));[/align]
[align=left] bi.hwndOwner=NULL;[/align]
[align=left] bi.lpszTitle="选择文件夹";[/align]
[align=left] bi.ulFlags=BIF_RETURNONLYFSDIRS;[/align]
[align=left] pidl = SHBrowseForFolder(&bi); [/align]
[align=left] ZeroMemory(szDirPath,MAX_PATH);[/align]
[align=left] SHGetPathFromIDList(pidl, szDirPath);[/align]
[align=left] SetWindowText(GetDlgItem(hwnd,IDC_EDT_FILEDIR),[/align]
[align=left] szDirPath); [/align]
[align=left]return TRUE;[/align]
[align=left]case IDOK: [/align]
[align=left] [/align]
[align=left] GetWindowText(GetDlgItem(hwnd,IDC_EDT_FILEDIR),szDirPath,256);[/align]
[align=left] GetWindowText(GetDlgItem(hwnd,IDC_EDT_PORT),szPort,6);[/align]
[align=left] strcpy(szIP,"http://127.0.0.1:");[/align]
[align=left] strcat(szIP,szPort);[/align]
[align=left] SetWindowText(GetDlgItem(hwnd,IDC_EDT_IP),szIP);[/align]
[align=left][/align]
[align=left]if((g_nFileCount =InitDirFileName(szDirPath))==0)[/align]
[align=left] exit(0);[/align]
[align=left][/align]
[align=left] uPort=atoi(szPort);[/align]
[align=left] listenSock=InitListenSock(uPort);[/align]
[align=left]if(WSAAsyncSelect(listenSock,hwnd,WM_SOCKET,FD_ACCEPT|FD_CLOSE)[/align]
[align=left] ==SOCKET_ERROR )[/align]
[align=left] {[/align]
[align=left] MessageBox(NULL,"SAAsyncSelect",NULL,MB_OK);[/align]
[align=left] exit(0);[/align]
[align=left] }[/align]
[align=left]if(listen(listenSock,5)==SOCKET_ERROR)[/align]
[align=left] {[/align]
[align=left] MessageBox(NULL,"listen",NULL,MB_OK);[/align]
[align=left] exit(0);[/align]
[align=left] }[/align]
[align=left][/align]
[align=left] ::EnableWindow(::GetDlgItem(hwnd,IDOK),false);[/align]
[align=left][/align]
[align=left]return TRUE;[/align]
[align=left]case IDCANCEL:[/align]
[align=left] EndDialog(hwnd,0);[/align]
[align=left]return TRUE;[/align]
[align=left] }[/align]
[align=left]break;[/align]
[align=left]case WM_SOCKET:[/align]
[align=left]if(WSAGETSELECTERROR(lParam)) [/align]
[align=left] {[/align]
[align=left] closesocket((SOCKET)wParam);[/align]
[align=left]return TRUE;[/align]
[align=left] }[/align]
[align=left]switch(WSAGETSELECTEVENT(lParam)) { [/align]
[align=left]case FD_ACCEPT: [/align]
[align=left]if((newAccept=accept(listenSock,(sockaddr*)&newSockaddr,&len))==[/align]
[align=left] INVALID_SOCKET)[/align]
[align=left] { [/align]
[align=left] exit(0);[/align]
[align=left] }[/align]
[align=left] WSAAsyncSelect(newAccept,hwnd,WM_SOCKET,FD_CLOSE|FD_READ|FD_WRITE); [/align]
[align=left]return TRUE;[/align]
[align=left]case FD_READ: [/align]
[align=left] nBufLen= recv((SOCKET)wParam,szGetBuf,1024,0);[/align]
[align=left] szGetBuf[nBufLen]='/0'; [/align]
[align=left]return TRUE;[/align]
[align=left]case FD_WRITE:[/align]
[align=left]if((pThread[nThreadCount] = CreateThread(NULL,0, [/align]
[align=left] ThreadProc,(LPVOID)wParam, 0, NULL))!=NULL)[/align]
[align=left] ++nThreadCount;[/align]
[align=left]if (nThreadCount==64)[/align]
[align=left] {[/align]
[align=left] nThreadCount=0;[/align]
[align=left] }[/align]
[align=left]return TRUE;[/align]
[align=left]case FD_CLOSE:[/align]
[align=left] MessageBox(NULL,"CLOSE",NULL,MB_OK);[/align]
[align=left] closesocket((SOCKET)wParam); [/align]
[align=left]return TRUE; [/align]
[align=left] }[/align]
[align=left]return TRUE;[/align]
[align=left] }[/align]
[align=left]return FALSE;[/align]
[align=left]}[/align]
[align=left]SOCKET InitListenSock(UINT uPort)[/align]
[align=left]{[/align]
[align=left] SOCKET listenSock;[/align]
[align=left]int iRet=0;[/align]
[align=left]if((listenSock=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP))==INVALID_SOCKET)[/align]
[align=left] {[/align]
[align=left] MessageBox(NULL,"socket","错误",MB_OK);[/align]
[align=left] exit(1);[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] SOCKADDR_IN listenAddr;[/align]
[align=left] listenAddr.sin_family=AF_INET;[/align]
[align=left] listenAddr.sin_port=htons(uPort);[/align]
[align=left] listenAddr.sin_addr.s_addr=htonl(INADDR_ANY); [/align]
[align=left][/align]
[align=left] iRet=bind(listenSock,(sockaddr*)&listenAddr,sizeof(listenAddr));[/align]
[align=left]if (iRet==SOCKET_ERROR) [/align]
[align=left] {[/align]
[align=left] MessageBox(NULL,"bind","错误",MB_OK);[/align]
[align=left] exit(1);[/align]
[align=left] }[/align]
[align=left]return listenSock;[/align]
[align=left]}[/align]
[align=left] [/align]
[align=left]int InitDirFileName(char *szDirPath)[/align]
[align=left]{ [/align]
[align=left]char *pStr=g_szDirPath;[/align]
[align=left]while (*szDirPath!='/0')[/align]
[align=left] {[/align]
[align=left]if(*szDirPath=='//')[/align]
[align=left] {[/align]
[align=left] *pStr='//';[/align]
[align=left] ++pStr;[/align]
[align=left] *pStr='//';[/align]
[align=left] }[/align]
[align=left]else[/align]
[align=left] *pStr=*szDirPath;[/align]
[align=left] ++szDirPath;[/align]
[align=left] ++pStr;[/align]
[align=left] }[/align]
[align=left] *pStr='//';[/align]
[align=left] ++pStr;[/align]
[align=left] *pStr='//';[/align]
[align=left] ++pStr;[/align]
[align=left] *pStr='/0';[/align]
[align=left] [/align]
[align=left]return EnumAllFile(g_szDirPath);[/align]
[align=left]}[/align]
[align=left]int EnumAllFile(char *szDirPath)[/align]
[align=left]{[/align]
[align=left] [/align]
[align=left]int nCount=0;[/align]
[align=left] WIN32_FIND_DATA fd;[/align]
[align=left] ZeroMemory(&fd,sizeof(WIN32_FIND_DATA));[/align]
[align=left] BOOL bFind=TRUE;[/align]
[align=left]char szTempDirPath[256];[/align]
[align=left] strcpy(szTempDirPath,szDirPath);[/align]
[align=left] strcat(szTempDirPath,"*");[/align]
[align=left] HANDLE hFind=FindFirstFile(szTempDirPath,&fd);[/align]
[align=left] assert(hFind);[/align]
[align=left] [/align]
[align=left]while( bFind &&nCount<256)[/align]
[align=left] {[/align]
[align=left]if( FindNextFile(hFind, &fd) )[/align]
[align=left] {[/align]
[align=left]if( (fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)[/align]
[align=left] && strcmp(fd.cFileName, ".") && strcmp(fd.cFileName, "..") )[/align]
[align=left]continue;[/align]
[align=left]elseif( strcmp(fd.cFileName, ".") && strcmp(fd.cFileName, "..") )[/align]
[align=left] {[/align]
[align=left] strcpy(g_szAllFileName[nCount],fd.cFileName); [/align]
[align=left] ++nCount;[/align]
[align=left] }[/align]
[align=left] }[/align]
[align=left]else[/align]
[align=left] bFind=FALSE; [/align]
[align=left] } [/align]
[align=left]return nCount;[/align]
[align=left]}[/align]
[align=left]DWORD WINAPI ThreadProc(LPVOID lParam)[/align]
[align=left]{[/align]
[align=left]int iRet=0;[/align]
[align=left]char szFileName[256];[/align]
[align=left] strcpy(szFileName,g_szDirPath);[/align]
[align=left]if (g_nNext==g_nFileCount)[/align]
[align=left] {[/align]
[align=left] g_nNext=0;[/align]
[align=left] }[/align]
[align=left] strcat(szFileName,g_szAllFileName[g_nNext]);[/align]
[align=left] ++g_nNext;[/align]
[align=left] [/align]
[align=left]int file =open(szFileName,0x100|002);[/align]
[align=left] [/align]
[align=left]int len;[/align]
[align=left]char *buf=NULL;[/align]
[align=left] [/align]
[align=left] len=filelength(file);[/align]
[align=left] buf=(char*)malloc(len);[/align]
[align=left]if (buf==NULL)[/align]
[align=left] {[/align]
[align=left] free(buf); [/align]
[align=left] exit(0);[/align]
[align=left] }[/align]
[align=left] read(file,buf,len);[/align]
[align=left] [/align]
[align=left] [/align]
[align=left] SOCKET newAccept=(SOCKET)lParam; [/align]
[align=left] [/align]
[align=left]if((iRet=send(newAccept,buf,len,0))==SOCKET_ERROR)[/align]
[align=left] {[/align]
[align=left] free(buf); [/align]
[align=left] exit(0); [/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] shutdown(newAccept,SD_RECEIVE);[/align]
[align=left] closesocket(newAccept);[/align]
[align=left] free(buf); [/align]
[align=left] [/align]
[align=left]return TRUE;[/align]
[align=left]}[/align]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: