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;
}