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

服务端的源码:

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

#include "stdafx.h"
#include <Windows.h>
#include <WinSock.h>
#include "../EchowareClient/EchoWareDll.h"

#pragma comment(lib,"ws2_32")
//服务器监听的端口
int nPort = 5000;
//允许连接echoware的尝试次数
#define MAX_CONNECT_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[] = "demo2007";
 char szPassword[] = "group1";
 char szMyId[] = "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");
  return 0;
 }
 printf("echoware.dll初始化成功!\r\n");


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

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

 pEchoProxy = Echoware.CreateProxyInfoClassObject();
 if (pEchoProxy == NULL)
 {
  printf("CreateProxyInfoClassObject失败!\r\n");
  return 0;
 }
 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");

 //////////////////////////////////////////////////////////////////////////
 //服务端要先开启一个端口进行监听
 //下面开始进行套接字创建连接
 printf("开始启动套接字……\r\n");
 printf("按任意键继续!\r\n");
 getchar();

 if (WSAStartup(MAKEWORD(2,2),&wsadata))
 {
  printf("套接字创建失败!\r\n");
  return 0;

 }

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

 }
REBIND:
 addrServer.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
 addrServer.sin_port = htons(nPort);
 addrServer.sin_family = AF_INET;

 //绑定
 if (SOCKET_ERROR == bind(server,(sockaddr*)&addrServer,sizeof(addrServer)))
 {
  printf("bind绑定失败!端口:%d,重试绑定下一个端口。\r\n",nPort);
  nPort++;
  goto REBIND;
 }
 printf("bind绑定成功!绑定端口:%d\r\n",nPort);
 
 //监听
 listen(server,5);
 printf("listen成功!\r\n");


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

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

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

 //判断到底连接成功没有
 if (nRetConnect != 0)
 {
  printf("连接echoware失败,退出!\r\n");
  return 0;
 }
 //////////////////////////////////////////////////////////////////////////
 //接收
 SOCKET  client;
 SOCKADDR_IN addrClient;
 int   addrLen = sizeof(addrClient);
 int   nRetSocket = 0;
 while(true)
 {
  //接收客户端的数据
  client = accept(server,(sockaddr*)&addrClient,&addrLen);
  if (client == INVALID_SOCKET)
  {
   printf("accept失败!\r\n");
   return 0;
  }
  printf("accept成功,等待连接……!\r\n");

  while(true)
  {
   nRetSocket = recv(client,recvBuff,200,0);
   if (nRetSocket == SOCKET_ERROR)
   {
    printf("接收客户端数据失败!\r\n");
    break;
   }
   else
   {
    nRetSocket = send(client,"yes",sizeof("yes"),0);
    printf("接收到客户端发送的数据!\r\n数据内容为:%s\r\n",recvBuff);
   }

  }
 }


 

EXIT0:
 Echoware.DisconnectProxy(pEchoProxy);
 WSACleanup();

 return 0;
}

发表评论】【告诉好友】【打印此文】【收藏此文】【关闭窗口
上一篇:echoware做中转连接的使用小结与实例(2) 下一篇:[源码收藏]改装的获取硬盘序列号网卡的一个类

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