⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ir chat.cpp

📁 windows mobile上进行GPRS拨号
💻 CPP
字号:
#include <windows.h>
#include <aygshell.h>
#include "resource.h"
#include "Ir Chat.h"
#include <winsock.h>
#include <initguid.h>//must in front of <connmgr.h>
#include <connmgr.h>
#include <tpcshell.h>
#pragma comment(lib,"aygshell")

const TCHAR szAppName[]=TEXT("GPRS");
const char chzAppName[] = "IrComm";
HWND hMain;
HINSTANCE	hInst;
TCHAR sSend[20],sReceived[20],szTitle[128];
static char   szIPAddr[32] = { "202.202.5.136" } ;
static SOCKET sock;

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,
                   LPWSTR lpCmdLine,int nCmdShow){
//	MSG msg;
	HWND hWnd=0;
	hInst = hInstance;

	hWnd = FindWindow(NULL,szAppName);
	if(hWnd)
	{
		SetForegroundWindow((HWND)(((DWORD)hWnd)|0x01));    
		return 0;
    }

	DialogBoxParam(hInst,TEXT("DLG_MAIN"),NULL,Main_DlgProc,LPARAM(lpCmdLine));

	return 0;
}
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
HWND InitDialog(HWND hWnd){
//	HANDLE hThread;
	SHINITDLGINFO shidi;
	memset(&shidi, 0, sizeof(shidi));
	shidi.dwMask=SHIDIM_FLAGS;
	shidi.dwFlags=SHIDIF_SIZEDLGFULLSCREEN;
	shidi.hDlg=hWnd;
	if(!SHInitDialog(&shidi))
        return FALSE;
/*
    hThread = MyCreateThread (NULL, 0, MonitorThread, hWnd, 0, 0);
    if (hThread == 0) {
        DestroyWindow (hWnd);
        return 0;
    }
    CloseHandle (hThread);
*/
	 return hWnd;
}
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
BOOL ShowMenubar(HWND hwnd,int menuid){
	 SHMENUBARINFO mbi;
     memset(&mbi, 0, sizeof(SHMENUBARINFO));
     mbi.cbSize=sizeof(SHMENUBARINFO);
     mbi.hwndParent=hwnd;
     mbi.nToolBarId=menuid;
     mbi.hInstRes=hInst;
     if (!SHCreateMenuBar(&mbi))
		 return FALSE;
     return TRUE;
}
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
BOOL CALLBACK Main_DlgProc(HWND hWnd,UINT msg,WPARAM wp,LPARAM lp){
	WSADATA		WSAData; 
	int			iError;
	static struct sockaddr_in sa;
	TCHAR str1[22],str2[32];
	char buff[256];
	HANDLE hGPRSConn;
	
	switch(msg){
		case WM_INITDIALOG:
			InitDialog(hWnd);
			ShowMenubar(hWnd,MB_MAIN);
			SetFocus(GetDlgItem(hWnd,IDE_Send));
			OverrideBackKey(hWnd);
			return TRUE;
		case WM_HOTKEY:
			SHSendBackToFocusWindow(msg,wp,lp);
			return TRUE;
		case WM_COMMAND:
			switch(LOWORD(wp)){
				case IDM_Connect:

//--------------------------------------------------------------------

					DWORD  pdwStatus;
					CONNMGR_CONNECTIONINFO sConInfo;
					memset(&sConInfo,0, sizeof(CONNMGR_CONNECTIONINFO));
					sConInfo.cbSize=sizeof(CONNMGR_CONNECTIONINFO);
					sConInfo.dwParams=CONNMGR_PARAM_GUIDDESTNET;
					sConInfo.dwPriority=CONNMGR_PRIORITY_USERINTERACTIVE;
					sConInfo.dwFlags=0;
					sConInfo.bExclusive=FALSE;
					sConInfo.bDisabled=FALSE;
					sConInfo.guidDestNet=IID_DestNetInternet;

					if(ConnMgrEstablishConnectionSync(&sConInfo,&hGPRSConn,20000,&pdwStatus) != S_OK)
					{
						return TRUE;
					}

					if (iError = WSAStartup (MAKEWORD(2,0), &WSAData))
					{
						ConnMgrReleaseConnection(hGPRSConn,0);
						Add2List (hWnd, TEXT ("Startup error #%i."),iError);
						return TRUE;
					}
					
//					Add2List (hWnd, TEXT ("Started up %hs"), WSAData.szDescription);//??????
					mbstowcs(str1,WSAData.szDescription,22);
					Add2List (hWnd, TEXT ("Started up %s"), str1);

					sock = socket (AF_INET,SOCK_STREAM,0);
					if (sock == INVALID_SOCKET)
					{
						ConnMgrReleaseConnection(hGPRSConn,0);
						WSACleanup ();
						Add2List(hWnd,TEXT ("Socket creation error #%d"),WSAGetLastError());
						return TRUE ;
					}
					Add2List (hWnd, TEXT ("Socket %i created."), sock) ;

					memset(&sa,0,sizeof(sa));
					sa.sin_family				= AF_INET ;
					sa.sin_port					= htons (5555) ; 
					sa.sin_addr.S_un.S_addr		= inet_addr (szIPAddr);
					iError = connect(sock, (SOCKADDR *) &sa, sizeof (sa));
					if (iError != 0)
					{
						ConnMgrReleaseConnection(hGPRSConn,0);
						closesocket (sock);
						WSACleanup ();
						Add2List (hWnd, TEXT ("Connect error #%d"),WSAGetLastError ());
						return TRUE ;
					}
					mbstowcs(str2,szIPAddr,32);
					Add2List (hWnd, TEXT ("Connecting to %s"),str2);

					memset(buff,0,sizeof(buff));
					if(recv(sock,buff,sizeof(buff),0) == SOCKET_ERROR){
						Add2List (hWnd, TEXT ("recv error!"));
						return TRUE;
					}
					Add2List (hWnd, TEXT("Server Date/time: %s"),buff);

//------------------------receive file-------------------------
					ReceiveFile(sock);

					Add2List (hWnd, TEXT("!!!test"));
//-------------------------------------------------------------

					ConnMgrReleaseConnection(hGPRSConn,10);
					closesocket (sock);
					WSACleanup ();

//-----------------------------------------------------------------------------------
					SetFocus(GetDlgItem(hWnd,IDE_Send));
					return TRUE;
				case IDM_OK:
					PostQuitMessage(0);
					return TRUE;
			}
			return TRUE;
	}
	return FALSE;
}

// Add2List - Add string to the report list box.
void Add2List (HWND hWnd, LPTSTR lpszFormat, ...) {
    int i, nBuf;
    TCHAR szBuffer[512];
   
    va_list args;
    va_start(args, lpszFormat);
   
    nBuf = _vstprintf(szBuffer, lpszFormat, args);
   
    i = SendDlgItemMessage (hWnd, IDLB_Received, LB_ADDSTRING, 0,
                            (LPARAM)(LPCTSTR)szBuffer);
    if (i != LB_ERR)
        SendDlgItemMessage (hWnd, IDLB_Received, LB_SETTOPINDEX, i,
                            (LPARAM)(LPCTSTR)szBuffer);
    va_end(args);
}

// MySetWindowText - Set window title to passed printf style string.
void MySetWindowText (HWND hWnd, LPTSTR lpszFormat, ...) {
    int nBuf;
    TCHAR szBuffer[512];
   
    va_list args;
    va_start(args, lpszFormat);
   
    nBuf =_vstprintf(szBuffer, lpszFormat, args);
   
    SetWindowText (hWnd, szBuffer);
    va_end(args);
}

BOOL OverrideBackKey(HWND hwnd){
	SendMessage(SHFindMenuBar(hwnd),SHCMBM_OVERRIDEKEY,VK_TBACK,
				MAKELPARAM(SHMBOF_NODEFAULT | SHMBOF_NOTIFY, 
				SHMBOF_NODEFAULT | SHMBOF_NOTIFY)); 
	return TRUE;
}

DWORD WINAPI MonitorThread (PVOID pArg){
	return 0;
}

DWORD ReceiveFile(SOCKET sersock)
{
    int nCnt, nFileSize, rc;
    TCHAR szFileName[MAX_PATH];
    char szAnsiName[MAX_PATH];
    PBYTE pBuff;
    int i, nSize, nTotal;
    DWORD dwBytes;
    HANDLE hFile;
	HWND hWnd=hMain;

//	SetThreadPriority (GetCurrentThread (), THREAD_PRIORITY_ABOVE_NORMAL);

    // Read the number of bytes in the filename.
    rc = recv(sersock, (LPSTR)&nCnt, sizeof (nCnt), 0);

    if ((rc == SOCKET_ERROR) || (nCnt > MAX_PATH))
	{
		Add2List (hWnd, TEXT ("failed receiving name size"));
        closesocket (sersock);
        return 0;
    }

    // Read the filename. 
    // Deal in ANSI here since it will be translated to Unicode later.
    strcpy (szAnsiName, "\\storage\\");   //!!!!!!!!!!!!!!!!

    i = strlen (szAnsiName);//Ansi
    rc = recv (sersock, (LPSTR)&szAnsiName[i], nCnt, 0);
    if (rc == SOCKET_ERROR)
	{
		Add2List (hWnd, TEXT ("failed receiving name"));
        closesocket (sersock);
        return 0;
    }
#ifdef _UNICODE
    mbstowcs (szFileName, szAnsiName, strlen (szAnsiName) + 1);
#else
    lstrcpy (szFileName, szAnsiName);
#endif
	printf("name: %s\n", szFileName);
   
    pBuff = (PBYTE)LocalAlloc (LPTR, BLKSIZE); //Create buff for file.

    // Receive file size.
    rc = recv(sersock, (LPSTR)&nFileSize, sizeof (nFileSize), 0);
	Add2List(hWnd,TEXT ("received file size of %d bytes"),nFileSize);

    if ((rc != SOCKET_ERROR) && (nFileSize > 0))
	{
        rc = 0;
        hFile = CreateFile (szFileName, GENERIC_WRITE, 0, NULL,
                            CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
        if (hFile == INVALID_HANDLE_VALUE)
		{
			Add2List(hWnd,TEXT ("File Open failed."));
            rc = BAD_FILEWRITE;
        }
        // Send ack code.
		Add2List(hWnd,TEXT ("Sending size ack."));
        send (sersock, (LPSTR)&rc, sizeof (rc), 0);

        // Receive file.
        nTotal = nFileSize;
        while ((!rc) && (nFileSize > 0))
		{
			nCnt = min(BLKSIZE, nFileSize);
            for (nSize = 0; nSize < nCnt;)
			{
                i = recv (sersock, (LPSTR)pBuff+nSize, nCnt-nSize, 0);
                if (i == SOCKET_ERROR)
				{
					Add2List(hWnd,TEXT ("recv socket err."));
                    rc = BAD_SOCKETRECV;
                    break;
                } 
                nSize += i;
            }
			Add2List(hWnd,TEXT ("recv'd %d bytes."),nSize);
            if (i)
			{
                if (!WriteFile (hFile, pBuff, nSize, &dwBytes, 0))
                    rc = BAD_FILEWRITE;
                nFileSize -= dwBytes;
            }
			else
                Sleep(50);
            // Send ack of packet.
            send (sersock, (LPSTR)&rc, sizeof (rc), 0);
        }
    }
	else if (rc == BAD_FILEOPEN)
		Add2List(hWnd,TEXT ("File not found."));
	Add2List(hWnd,TEXT ("receive finished."));
    LocalFree (pBuff);  
    CloseHandle (hFile);
    return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -