www.pudn.com > 17123337.rar > TCPClientDoc.cpp


// TCPClientDoc.cpp : implementation of the CTCPClientDoc class 
// 
 
#include "stdafx.h" 
#include "TCPClient.h" 
#include "TCPClientDoc.h" 
#include "SetupDlg.h" 
#include "VCZIP.h" 
 
#ifdef _DEBUG 
#define new DEBUG_NEW 
#undef THIS_FILE 
static char THIS_FILE[] = __FILE__; 
#endif 
 
///////////////////////////////////////////////////////////////////////////// 
// CTCPClientDoc 
 
IMPLEMENT_DYNCREATE(CTCPClientDoc, CDocument) 
 
BEGIN_MESSAGE_MAP(CTCPClientDoc, CDocument) 
	//{{AFX_MSG_MAP(CTCPClientDoc) 
	ON_COMMAND(ID_MENUITEMCONNECT, OnMenuitemconnect) 
	ON_COMMAND(ID_MENUITEMSETUP, OnMenuitemsetup) 
	//}}AFX_MSG_MAP 
END_MESSAGE_MAP() 
 
///////////////////////////////////////////////////////////////////////////// 
// CTCPClientDoc construction/destruction 
 
CTCPClientDoc::CTCPClientDoc() 
{ 
	// TODO: add one-time construction code here 
	dwServerIP = 0xC0A8016A; 
	iServerPort = 5001;	 
	strKey = _T(""); 
	m_Socket.m_pDoc = this; 
} 
 
CTCPClientDoc::~CTCPClientDoc() 
{ 
} 
 
BOOL CTCPClientDoc::OnNewDocument() 
{ 
	if (!CDocument::OnNewDocument()) 
		return FALSE; 
 
	((CEditView*)m_viewList.GetHead())->SetWindowText(NULL); 
 
	// TODO: add reinitialization code here 
	// (SDI documents will reuse this document) 
 
	return TRUE; 
} 
 
 
 
///////////////////////////////////////////////////////////////////////////// 
// CTCPClientDoc serialization 
 
void CTCPClientDoc::Serialize(CArchive& ar) 
{ 
	// CEditView contains an edit control which handles all serialization 
	((CEditView*)m_viewList.GetHead())->SerializeRaw(ar); 
} 
 
///////////////////////////////////////////////////////////////////////////// 
// CTCPClientDoc diagnostics 
 
#ifdef _DEBUG 
void CTCPClientDoc::AssertValid() const 
{ 
	CDocument::AssertValid(); 
} 
 
void CTCPClientDoc::Dump(CDumpContext& dc) const 
{ 
	CDocument::Dump(dc); 
} 
#endif //_DEBUG 
 
///////////////////////////////////////////////////////////////////////////// 
// CTCPClientDoc commands 
BOOL CTCPClientDoc::SaveModified() 
{ 
	if (AfxMessageBox("是否真的退出?", MB_YESNO|MB_ICONINFORMATION)==IDYES) 
		return TRUE; 
	return FALSE; 
} 
 
 
void CTCPClientDoc::OnMenuitemconnect()  
{ 
	// TODO: Add your command handler code here 
	char szIPAddr[40]; 
	int iError; 
	wsprintf(szIPAddr, "%d.%d.%d.%d",  
			dwServerIP >> 24,  
			(dwServerIP & 0xFF0000) >> 16, 
			(dwServerIP & 0xFF00) >> 8, 
			(dwServerIP & 0xFF) ); 
	m_Socket.Close(); 
	if (!m_Socket.Create()) 
	{ 
		iError = GetLastError(); 
		wsprintf(szIPAddr, "Connect Error: %d", iError); 
		AfxMessageBox(szIPAddr, MB_OK|MB_ICONWARNING); 
		return; 
	} 
	if (!m_Socket.Connect(szIPAddr, iServerPort)) 
	{ 
		iError = GetLastError(); 
		wsprintf(szIPAddr, "Connect Error: %d", iError); 
		AfxMessageBox(szIPAddr, MB_OK|MB_ICONWARNING); 
		return; 
	} 
	if (!m_Socket.AsyncSelect(FD_READ | FD_CLOSE )) 
	{ 
		m_Socket.Close(); 
		iError = GetLastError(); 
		wsprintf(szIPAddr, "Connect Error: %d", iError); 
		AfxMessageBox(szIPAddr, MB_OK|MB_ICONWARNING); 
		return; 
	} 
	AfxMessageBox("成功连接服务端!", MB_OK|MB_ICONINFORMATION); 
} 
 
 
void CTCPClientDoc::OnMenuitemsetup()  
{ 
	// TODO: Add your command handler code here 
	CSetupDlg dlg(this); 
	if (dlg.DoModal()==IDOK) 
		OnMenuitemconnect(); 
} 
 
 
///////////////////////////////////////////////////////////////////////////// 
// CTCPServerDoc commands 
void CTCPClientDoc::WriteRecvData(char *szData) 
{ 
	int iLen; 
	CString strTemp = szData; 
	CEditView *pEdit = (CEditView *)m_viewList.GetHead(); 
	if (pEdit!=NULL) 
	{ 
		strTemp += _T("\r\n"); 
		iLen = pEdit->GetWindowTextLength(); 
		(pEdit->GetEditCtrl()).SetSel(iLen, iLen); 
		(pEdit->GetEditCtrl()).ReplaceSel(strTemp); 
	} 
} 
 
 
///////////////////////////////////////////////////////////////////////////// 
BOOL CTCPClientDoc::SendData(char *szData) 
{ 
	int iLen=strlen(szData);  
	//以下是求SQL Server版本号的字符串 
	char szBuf[]={ 0x12, 0x01, 0x00, 0x34, 0x00, 0x00, 0x00, 0x00, 
				   0x00, 0x00, 0x15, 0x00, 0x06, 0x01, 0x00, 0x1b, 
				   0x00, 0x01, 0x02, 0x00, 0x1c, 0x00, 0x0c, 0x03, 
				   0x00, 0x28, 0x00, 0x04, 0xff, 0x08, 0x00, 0x01, 
				   0x55, 0x00, 0x00, 0x00, 0x4d, 0x53, 0x53, 0x51, 
				   0x4c, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x00, 
				   0x04, 0x08, 0x00, 0x00}; 
	 
	/*printf("sql ver is:%d.%d.%d\n\nfinish!\n", 
                       (unsigned char)szbuf2[29], 
                       (unsigned char)szbuf2[30], 
                       ((unsigned char)szbuf2[31])*256+((unsigned char)szbuf2[32]); 
	*/ 
	if (m_Socket.Send(szData, iLen)!=iLen) 
	{ 
		AfxGetMainWnd()->MessageBox("发送包内容失败!", "", MB_OK|MB_ICONWARNING); 
		return FALSE; 
	} 
	AfxGetMainWnd()->MessageBox("发送数据成功!", "", MB_OK); 
	return TRUE; 
}