maketyp.cpp

来自「vt100终端仿真程序」· C++ 代码 · 共 202 行

CPP
202
字号
// MakeTyp.cpp: implementation of the CMakeTyp class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "vt100.h"
#include "MakeTyp.h"
//#include "iphlpapi.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CMakeTyp::CMakeTyp()
{

}

CMakeTyp::~CMakeTyp()
{

}

int CMakeTyp::StartTyp(int iTermNo)
{
		SOCKET ServerAddrSocket;
		WSADATA WSAData;
		struct sockaddr_in ServerAddr;
		char szIp[20],szTemp[30];
		TCHAR wcIp[20];
		int iPortNum,iRet;
		CCfgFile csCfgFile;
/////////////////////////////////////////////////////////////
/*		//Get Local IP Address
		MIB_IPADDRTABLE AddrTable[10];
		DWORD dwBytes;
		BYTE addr[4];
		char LocalIp[20];

		dwBytes=sizeof(AddrTable);
		GetIpAddrTable(AddrTable,&dwBytes,FALSE);
		memcpy(addr,&(AddrTable[0].table[0].dwAddr),4);
		memset(LocalIp,0x00,sizeof(LocalIp));
		sprintf(LocalIp,"%d.%d.%d.%d",addr[0],addr[1],addr[2],addr[3]);
*/////////////////////////////////////////////////////////////////

		//Get parameter from config file
		iPortNum=csCfgFile.GetCfgItemInt(PORTNUM);
		if(iPortNum==23)
			return 0;

		memset(wcIp,0,sizeof(wcIp));
		iRet=csCfgFile.GetCfgItemStr(IPADD,wcIp,16);
		if(iRet<=0)
			return 1;

		memset(szIp,0,sizeof(szIp));
		while(iRet>0){
			szIp[iRet-1]=(char)wcIp[iRet-1];
			iRet--;
		}

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

		iRet=0;
		while(iRet<60){
			if(connect(ServerAddrSocket,(LPSOCKADDR)&ServerAddr,sizeof(ServerAddr))==SOCKET_ERROR)
				Sleep(50);
			else
				break;

			iRet++;
		}

		if(iRet==60){
			closesocket(ServerAddrSocket);
			return 4;	
		}

		//send start request to host
		strcpy(szTemp,"1001");
		iRet=send(ServerAddrSocket,szTemp,4,0);
//		iRet=send(ServerAddrSocket,LocalIp,strlen(LocalIp),0);
		if(iRet<=0){
			closesocket(ServerAddrSocket);
			return 5;
		}

		memset(szTemp,0,sizeof(szTemp));
		iRet=recv(ServerAddrSocket,szTemp,2,0);
		if(iRet<=0){
			closesocket(ServerAddrSocket);
			return 6;
		}
		
		if(szTemp[0]==0){
			closesocket(ServerAddrSocket);
			return 7;		
		}

		closesocket(ServerAddrSocket);
//		Sleep(10000);

		return 0;
}

int CMakeTyp::StopTyp(int iTermNo)
{
		SOCKET ServerAddrSocket;
		WSADATA WSAData;
		struct sockaddr_in ServerAddr;
		char szIp[20],szTemp[30];
		TCHAR wcIp[20];
		int iPortNum,iRet;
		CCfgFile csCfgFile;

		//Get parameter from config file
		iPortNum=csCfgFile.GetCfgItemInt(PORTNUM);
		if(iPortNum==23)
			return 0;

		memset(wcIp,0,sizeof(wcIp));
		iRet=csCfgFile.GetCfgItemStr(IPADD,wcIp,16);
		if(iRet<=0)
			return 1;

		memset(szIp,0,sizeof(szIp));
		while(iRet>0){
			szIp[iRet-1]=(char)wcIp[iRet-1];
			iRet--;
		}

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

		iRet=0;
		while(iRet<1200){
			if(connect(ServerAddrSocket,(LPSOCKADDR)&ServerAddr,sizeof(ServerAddr))==SOCKET_ERROR)
				Sleep(50);
			else
				break;

			iRet++;
		}

		if(iRet==1200){
			closesocket(ServerAddrSocket);
			return 4;	
		}

		//send start request to host
		strcpy(szTemp,"0001");
		iRet=send(ServerAddrSocket,szTemp,4,0);
		if(iRet<=0){
			closesocket(ServerAddrSocket);
			return 5;
		}

		memset(szTemp,0,sizeof(szTemp));
		iRet=recv(ServerAddrSocket,szTemp,2,0);
		if(iRet<=0){
			closesocket(ServerAddrSocket);
			return 6;
		}
		
		if(szTemp[0]!=0){
			closesocket(ServerAddrSocket);
			return 7;		
		}

		closesocket(ServerAddrSocket);

		return 0;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?