最新文章
热门文章
WinPE操作系统的使用及简介(破解 
QQ象棋,联众象棋游戏如何作弊 
如何解决网页中图片大小类型等属 
总结几种结构体初始化方法 
关于硕士毕业论文自动生成目录和 
VC建立类向导(class wizard)错误 
C++中取随机数函数rand和srand用 
VC编写自己构造http协议数据的po 
如何查看得到windows系统管理员帐 
由DCOM权限引起的在windows2003上 
当前位置:李露的博客 >> 电脑技术 >> 浏览文章
echoware做中转连接的使用小结与实例(2)
更新日期:2010年04月12日  来源:本站原创  作者:天漏客   访问次数:次  【字体:

客户端的代码:

// EchowareClient.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <Windows.h>
#include <WinSock.h>
#include "EchowareDll.h"

#pragma comment(lib,"ws2_32")
//连接服务器端的端口
#define CONNECT_PORT 5000
//允许连接echoware的尝试次数
#define MAX_CONNECT_COUNT 10
#define MAX_ESTABLE_COUNT 10

int _tmain(int argc, _TCHAR* argv[])
{

 CEchowareDll Echoware;
 IDllProxyInfo *pEchoProxy = NULL;
 //char szServerIP[] = "demo.echovnc.com";
 char szServerIP[] = "192.168.2.205";
 char szPort[] = "1328";
 char szPassword[] = "group1";
 char szMyId[] = "liluClient";
 char szPartId[] = "liluServer";

 //socket变量
 WSADATA wsadata = {0};
 SOCKADDR_IN addrServer = {0};
 SOCKET server;
 char recvBuff[200] = {0};


 //echoware连接次数和返回值
 int    nRetConnect = 0; //连接返回值
 int    nCountConnect = 1; //连接次数

 printf("echoware客户端测试程序开始启动!\r\n\r\n");
 printf("代码编写者:天漏客!\r\n");
 printf("个人主页:http://www.lilu.name\r\n");
 printf("QQ:285252760\r\n\r\n");
 //先初始化
 if (!Echoware.Init())
 {
  printf("echoware.dll初始化失败!\r\n");
  goto EXIT0;
 }
 printf("echoware.dll初始化成功!\r\n");


 if (!Echoware.InitializeProxyDll())
 {
  printf("InitializeProxyDll初始化失败!\r\n");
  goto EXIT0;
 }
 printf("InitializeProxyDll成功!\r\n");

 ////设置日志记录
 //Echoware.SetLoggingOptions(TRUE,"logging.txt");

 pEchoProxy = Echoware.CreateProxyInfoClassObject();
 if (pEchoProxy == NULL)
 {
  printf("CreateProxyInfoClassObject失败!\r\n");
  goto EXIT0;
 }
 printf("CreateProxyInfoClassObject成功!\r\n");

 pEchoProxy->SetIP(szServerIP);
 pEchoProxy->SetPort(szPort);
 pEchoProxy->SetPassword(szPassword);
 pEchoProxy->SetMyID(szMyId);

 printf("设置连接信息成功!\r\n");
 printf("IP:%s\r\n",szServerIP);
 printf("Port:%s\r\n",szPort);
 printf("Passport:%s\r\n",szPassword);
 printf("MyId:%s\r\n",szMyId);
 //加密级别
 Echoware.SetEncryptionLevel(1,pEchoProxy);
 printf("SetEncryptionLevel成功!\r\n");

 //Echoware.SetPortForOffLoadingData(CONNECT_PORT);
 //printf("SetPortForOffLoadingData成功!当前端口:%d\r\n",CONNECT_PORT);

 //////////////////////////////////////////////////////////////////////////
 printf("正在准备第%d次连接echoware服务器……\r\n",nCountConnect);
 printf("按任意键开始连接!\r\n");
 getchar();

STARTCONNECT:
 nRetConnect = Echoware.ConnectProxy(pEchoProxy);
 if (nRetConnect == 0)
 {
  printf("echoware服务器连接成功!\r\n");
 }
 else if (nRetConnect == 1)
 {
  if (nCountConnect++ < MAX_CONNECT_COUNT)
  {
   printf("地址不对,尝试第%d次连接……\r\n",nCountConnect);
   goto STARTCONNECT;
  }
 }
 else if (nRetConnect == 2)
 {
  if (nCountConnect++ < MAX_CONNECT_COUNT)
  {
   printf("认证失败,尝试第%d次连接……\r\n",nCountConnect);
   goto STARTCONNECT;
  }
 }
 else if (nRetConnect == 3)
 {
  if (nCountConnect++ < MAX_CONNECT_COUNT)
  {
   printf("连接已存在,尝试第%d次连接……\r\n",nCountConnect);
   goto STARTCONNECT;
  }
 }
 else
 {
  if (nCountConnect++ < MAX_CONNECT_COUNT)
  {
   printf("其他异常,尝试第%d次连接……\r\n",nCountConnect);
   goto STARTCONNECT;
  }
 }

 //////////////////////////////////////////////////////////////////////////
 nCountConnect = 1;
 printf("正在准备第%d次通过echoware和服务端建立通道……\r\n",nCountConnect);
 printf("按任意键开始连接!\r\n");
 getchar();

STARTDATACHANNEL:
 //建立连接通道
 nRetConnect = Echoware.EstablishNewDataChannel(pEchoProxy,szPartId);
 if (nRetConnect == 0 && nCountConnect++ < MAX_ESTABLE_COUNT)
 {
  printf("EstablishNewDataChannel建立失败,尝试第%d次建立……\r\n",nCountConnect);
  goto STARTDATACHANNEL;
 }
 //如果连接失败
 if (nCountConnect == MAX_ESTABLE_COUNT)
 {
  printf("echoware连接成功,但建立信息通道失败!\r\n");
  return 0;
 }
 printf("EstablishNewDataChannel建立通道成功,返回端口:%d\r\n",nRetConnect);

 //////////////////////////////////////////////////////////////////////////
 //下面开始进行套接字创建连接
 printf("正在开始套接字连接……\r\n");
 printf("按任意键开始连接!\r\n");
 getchar();

 //开始连接

 WSAStartup(MAKEWORD(2,2),&wsadata);
 addrServer.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
 addrServer.sin_port = htons(nRetConnect);
 addrServer.sin_family = AF_INET;

 //创建套接字
 server = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
 if (server == INVALID_SOCKET)
 {
  printf("socket创建失败!\r\n");
  goto EXIT0;

 }
 //连接服务器
 if (SOCKET_ERROR == connect(server,(sockaddr*)&addrServer,sizeof(addrServer)))
 {
  printf("连接失败!\r\n");
  goto EXIT0;
 }

 printf("连接成功!连接端口:%d\r\n",nRetConnect);


 if (SOCKET_ERROR == send(server,"hello",sizeof("hello"),0))
 {
  printf("向服务器发送hello失败!\r\n");
  goto EXIT0;
 }
 printf("向服务器发送hello成功!\r\n");

 //接收服务器端的返回数据
 if (SOCKET_ERROR == recv(server,recvBuff,200,0))
 {
  printf("接收服务器返回数据失败!\r\n");
 }
 printf("接收服务器返回数据成功!返回数据为:%s\r\n",recvBuff);

 

EXIT0:
 WSACleanup();

 return 0;
}

 

发表评论】【告诉好友】【打印此文】【收藏此文】【关闭窗口
上一篇:echoware做中转连接的使用小结与实例(1) 下一篇:echoware做中转连接的使用小结与实例(3)

Copyright 2006-2012 Powered by LiLu.NAME,李露的博客 All Rights Reserved.
E-Mail:lilu.name#gamil.com(注意是gmail,自己改) QQ:285252760
苏ICP备08016526号