www.pudn.com > 200410111016053551.rar > TCPServerDoc.cpp


// TCPServerDoc.cpp : implementation of the CTCPServerDoc class 
// 
 
#include "stdafx.h" 
#include "TCPServer.h" 
#include "TCPServerDoc.h" 
#include "Des.h" 
#include "SetupDlg.h" 
 
#ifdef _DEBUG 
#define new DEBUG_NEW 
#undef THIS_FILE 
static char THIS_FILE[] = __FILE__; 
#endif 
 
///////////////////////////////////////////////////////////////////////////// 
// CTCPServerDoc 
 
IMPLEMENT_DYNCREATE(CTCPServerDoc, CDocument) 
 
BEGIN_MESSAGE_MAP(CTCPServerDoc, CDocument) 
	//{{AFX_MSG_MAP(CTCPServerDoc) 
	ON_COMMAND(ID_MENUITEMPORT, OnMenuitemport) 
	//}}AFX_MSG_MAP 
END_MESSAGE_MAP() 
 
///////////////////////////////////////////////////////////////////////////// 
// CTCPServerDoc construction/destruction 
 
CTCPServerDoc::CTCPServerDoc() 
{ 
	// TODO: add one-time construction code here 
	m_iTcpPort = 7001; 
	ZXZServer.m_pDoc = this; 
	if (ZXZServer.Create(m_iTcpPort)) 
		ZXZServer.Listen(); 
	else 
	{ 
		AfxMessageBox("创建Socket失败!", MB_OK|MB_ICONERROR); 
	} 
} 
 
CTCPServerDoc::~CTCPServerDoc() 
{ 
} 
 
BOOL CTCPServerDoc::OnNewDocument() 
{ 
	if (!CDocument::OnNewDocument()) 
		return FALSE; 
 
	((CEditView*)m_viewList.GetHead())->SetWindowText(NULL); 
	((CEditView*)m_viewList.GetTail())->SetWindowText(NULL); 
 
	// TODO: add reinitialization code here 
	// (SDI documents will reuse this document) 
 
	return TRUE; 
} 
 
 
 
///////////////////////////////////////////////////////////////////////////// 
// CTCPServerDoc serialization 
 
void CTCPServerDoc::Serialize(CArchive& ar) 
{ 
	// CEditView contains an edit control which handles all serialization 
	((CEditView*)m_viewList.GetHead())->SerializeRaw(ar); 
} 
 
///////////////////////////////////////////////////////////////////////////// 
// CTCPServerDoc diagnostics 
 
#ifdef _DEBUG 
void CTCPServerDoc::AssertValid() const 
{ 
	CDocument::AssertValid(); 
} 
 
void CTCPServerDoc::Dump(CDumpContext& dc) const 
{ 
	CDocument::Dump(dc); 
} 
#endif //_DEBUG 
 
///////////////////////////////////////////////////////////////////////////// 
// CTCPServerDoc commands 
void CTCPServerDoc::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 CTCPServerDoc::SendData(char *szData) 
{ 
	int iLen=strlen(szData);  
	BYTE szTemp[4]; 
 
	for(int i=0; iMessageBox("发送数据失败!", "", MB_OK|MB_ICONWARNING); 
				return FALSE; 
			} 
		} 
		else if (szData[i+1]=='\\') 
		{ 
			if (!ZXZServer.SendData("\\", 1)) 
			{ 
				AfxGetMainWnd()->MessageBox("发送数据失败!", "", MB_OK|MB_ICONWARNING); 
				return FALSE; 
			} 
			i++; 
		} 
		else if ((szData[i+1]=='x' || szData[i+1]=='X') && 
				((szData[i+2]>='0' && szData[i+2]<='9') ||  
				 (szData[i+2]>='A' && szData[i+2]<='F') || 
				 (szData[i+2]>='a' && szData[i+2]<='f'))&& 
				((szData[i+3]>='0' && szData[i+3]<='9') ||  
				 (szData[i+3]>='A' && szData[i+3]<='F') || 
				 (szData[i+3]>='a' && szData[i+3]<='f')) ) 
		{ 
			DSP_2_HEX((BYTE *)(szData+i+2), (BYTE *)szTemp, 2) ; 
			if (!ZXZServer.SendData((char *)szTemp, 1)) 
			{ 
				AfxGetMainWnd()->MessageBox("发送数据失败!", "", MB_OK|MB_ICONWARNING); 
				return FALSE; 
			} 
			i += 3; 
		} 
		else 
		{ 
			AfxGetMainWnd()->MessageBox("发送数据格式错误!", "", MB_OK|MB_ICONWARNING); 
			return FALSE; 
		} 
	} 
	AfxGetMainWnd()->MessageBox("发送数据成功!", "", MB_OK); 
	return TRUE; 
} 
 
///////////////////////////////////////////////////////////////////////////// 
void CTCPServerDoc::OnMenuitemport()  
{ 
	// TODO: Add your command handler code here 
	CSetupDlg Dlg(m_iTcpPort); 
	int iRet = Dlg.DoModal(); 
	if ( iRet > 0 ) 
	{ 
		m_iTcpPort = iRet; 
		ZXZServer.CloseAllSocket(); 
		if (ZXZServer.Create(m_iTcpPort)) 
			ZXZServer.Listen(); 
		else 
		{ 
			AfxGetMainWnd()->MessageBox("创建SOCKET失败!", "提示信息", MB_OK|MB_ICONERROR); 
		} 
	} 
} 
 
///////////////////////////////////////////////////////////////////////////// 
BOOL CTCPServerDoc::SaveModified() 
{ 
	if (AfxMessageBox("是否真的退出?", MB_YESNO|MB_ICONINFORMATION)==IDYES) 
		return TRUE; 
	return FALSE; 
}