📄 ir chat.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 + -