客户端的代码:
// 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;
}