服务端的源码:
// 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;
}