📄 telnet.h
字号:
// Telnet.h: interface for the CTelnet class.
//
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_TELNET_H__F8B8D3EA_C3DD_4711_B2E9_6D7E4DFCF484__INCLUDED_)
#define AFX_TELNET_H__F8B8D3EA_C3DD_4711_B2E9_6D7E4DFCF484__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include "winsock.h"
#include "Communicate.h"
#include "cfgfile.h"
#include "maketyp.h"
extern int iTrace;
extern int iTermNo;
class CTelnet : public CCommunicate
{
public:
CTelnet();
virtual ~CTelnet();
virtual int InitCom()
{
WSADATA WSAData;
struct sockaddr_in ServerAddr;
char szIp[20];
TCHAR wcIp[20];
int iPortNum,iRet;
CCfgFile csCfgFile;
CMakeTyp csMakePty;
if (m_pOwnerWnd==NULL){
return 1;
}
if(m_blIsRcvThreadActive||m_blIsSndThreadActive)
return 0;
//Get parameter from config file
m_iTermNo=iTermNo;
memset(wcIp,0,sizeof(wcIp));
iRet=csCfgFile.GetCfgItemStr(IPADD,wcIp,16);
if(iRet<=0)
return 7;
memset(szIp,0,sizeof(szIp));
while(iRet>0){
szIp[iRet-1]=(char)wcIp[iRet-1];
iRet--;
}
iPortNum=csCfgFile.GetCfgItemInt(PORTNUM);
if (WSAStartup(MAKEWORD(1,1), &WSAData)!=0){
return 2;
}
//create socket
ServerAddr.sin_family=AF_INET;
ServerAddr.sin_addr.s_addr=inet_addr(szIp);
ServerAddr.sin_port=htons(iPortNum);
ServerAddrSocket=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if(ServerAddrSocket<0) {
return 3;
}
if(csMakePty.StartTyp(1)!=0)
return 7;
if(connect(ServerAddrSocket,(LPSOCKADDR)&ServerAddr,sizeof(ServerAddr))==SOCKET_ERROR) {
closesocket(ServerAddrSocket);
return 4;
}
//create stop evnet
/* m_hStopEvent=CreateEvent(NULL,TRUE,FALSE,NULL);
//create send request event
m_hSendDataEvent=CreateEvent(NULL,TRUE,FALSE,NULL);
*/
//make pty
m_blIsRcvThreadActive=FALSE;
m_blIsSndThreadActive=FALSE;
//create Rcv thread
DWORD dwRcvId;
if((m_pRcvThread=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)RcvThread,this,0,&dwRcvId))==NULL){
csMakePty.StopTyp(1);
return 5;
}
//create Snd thread
/* DWORD dwSndId;
if(CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)SndThread,this,0,&dwSndId)==NULL){
return 6;
}
*/
//wait until started
while(!m_blIsRcvThreadActive){
Sleep(10);
}
/* while(!m_blIsSndThreadActive){
Sleep(10);
}
*/
return 0;
}
virtual int ResetCom()
{
CMakeTyp csMakePty;
// MSG message;
//Send Stop signal to SndThread
/* if(m_hStopEvent!=NULL){
SetEvent(m_hStopEvent);///触发事件
while(m_blIsSndThreadActive==TRUE)
if(::PeekMessage(&message,NULL,0,0,PM_REMOVE)){
::TranslateMessage(&message);
::DispatchMessage(&message);
}
CloseHandle(m_hStopEvent);
m_hStopEvent=NULL;
}
*/
csMakePty.StopTyp(1);
//close comm handle
if(ServerAddrSocket!=NULL){
closesocket(ServerAddrSocket);
ServerAddrSocket=NULL;
}
//kill RcvThread
if(m_blIsRcvThreadActive==TRUE){
TerminateThread(m_pRcvThread,0);
m_blIsRcvThreadActive=FALSE;
}
return 0;
}
virtual int SendData(char *pszSendBuf,int iLen)
{
char szTemp[100];
int iRet;
memset(m_szSendBuf,0,sizeof(m_szSendBuf));
memcpy(m_szSendBuf,pszSendBuf,iLen);
m_dwSendLen=iLen;
// csLog.WriteLog(1,0,m_szSendBuf,m_dwSendLen);
if((iRet=send(ServerAddrSocket,m_szSendBuf,m_dwSendLen,0))<=0){
sprintf(szTemp,"Snd Error,error code=%d",GetLastError());
// csLog.WriteLog(1,0,szTemp,0);
return 1;
}
else{
// csLog.WriteLog(1,0,m_szSendBuf,iRet);
//SetEvent(m_hSendDataEvent);
}
return 0;
}
private:
int m_iTermNo;
int Trans(char *pszSrc,char *pszDes);
int GetUserPwd(char *pszUserPwd);
int GetUserId(char *pszUserId);
static UINT RcvThread(LPVOID pParam);
static UINT SndThread(LPVOID pParam);
// int RcvData(char *pszDataBuf,DWORD *pdwLen);
int Negotiate();
BOOL m_blNeg;
SOCKET ServerAddrSocket;
protected:
int LogOn();
BOOL m_blLogonOk;
};
#endif // !defined(AFX_TELNET_H__F8B8D3EA_C3DD_4711_B2E9_6D7E4DFCF484__INCLUDED_)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -