Silverlight网页客户端测试服务器程序 服务器测试程序

       因为Silverlight的安全机制,首先要访问服务器的943端口,接受策略文件比对,才能进行正常的Socket通信,所以服务器测试程序要开两个端口

943和4530(可以是其他的,不过有范围限定),两个线程。



/*				if(myHandle) SuspendThread(myHandle);//挂起线程
				if(myHandle) ResumeThread(myHandle);//恢复线程
				if(myHandle) TerminateThread(myHandle,0);//终止线程
*/
#include <windows.h>
#include <iostream>
#include <winsock2.h>
//#include <socket.h>
using namespace std;
DWORD WINAPI acceptPoly(LPVOID argv);//声明一个线程函数
DWORD WINAPI acceptDate(LPVOID argv);
SOCKET m_servSocketPoly;    //Poly Server
SOCKET m_servSocket;
SOCKET m_servSocketDate;    //Date Server
sockaddr_in clientAddr;     //Date Client
sockaddr_in polyAddr;       //Poly Client
HANDLE myPolyThread;
HANDLE myDateThread;

int main(int argc, char *argv[])
{
    WSADATA wsa = {0};
    if(WSAStartup(MAKEWORD(2,2),&wsa))
        cout<<"DLL库失败\n";
	string s;
	myPolyThread = CreateThread(NULL,0,acceptPoly,(LPVOID)0,0,NULL);//创建线程
	myDateThread  = CreateThread(NULL,0,acceptDate,(LPVOID)0,0,NULL);//创建线程
	SuspendThread(myDateThread);//挂起线程

    while(1);
	return 0;
}

DWORD WINAPI acceptPoly(LPVOID argv)
{
	if((m_servSocketPoly = socket(AF_INET, SOCK_STREAM, 0))==INVALID_SOCKET)
        cout<<"Poly Socket Creat Failed!\n";
	sockaddr_in serverAddr;
	memset((char*)&serverAddr, 0, sizeof(serverAddr));
	serverAddr.sin_family       = AF_INET;
	serverAddr.sin_port         = htons(943);
	serverAddr.sin_addr.s_addr  = htonl(INADDR_ANY);

	if(bind(m_servSocketPoly, (struct sockaddr*)&serverAddr, sizeof(serverAddr)))
        cout<<"Poly Socket bind Failed!\n";
    if(listen(m_servSocketPoly, 8)!= 0)
        cout<<"Poly Socket Listen Failed!\n";

    cout<<"Poly Prepared ALL Success!"<<endl;
    while(1)
    {
        char recvbuf[1000];
        memset(recvbuf, 0, 1000);
        FILE *pfile = fopen("PolicyFile.xml","r");
            assert(pfile != NULL);
        int lenAddr = sizeof(polyAddr);
        SOCKET _policy = accept(m_servSocketPoly, (struct sockaddr*)&polyAddr, &lenAddr);
        int len = recv(_policy, recvbuf, 1000, 0);
        if (memcmp(recvbuf,"<policy-file-request/>",sizeof("<policy-file-request/>"))==0)
        {
            cout<<"Send Poly Success!\n";
            memset(recvbuf, 0, 1000);
            int readCount = fread(recvbuf, sizeof(recvbuf), 1, pfile);
            send(_policy, recvbuf, strlen(recvbuf), 0);
            cout<<readCount<<"    \n"<<recvbuf<<endl;
            fclose(pfile);
            ResumeThread(myDateThread);
            SuspendThread(myPolyThread);//挂起线程

        }
    }

}

DWORD WINAPI acceptDate(LPVOID argv)    Date
{
    char recvbuf[1000];
    memset(recvbuf, 0, 1000);
    if((m_servSocketDate = socket(AF_INET, SOCK_STREAM, 0))==INVALID_SOCKET)
        cout<<"Date Socket Creat Failed!\n";
	sockaddr_in serverAddr;
	memset((char*)&serverAddr, 0, sizeof(serverAddr));
	serverAddr.sin_family       = AF_INET;
	serverAddr.sin_port         = htons(4530);
	serverAddr.sin_addr.s_addr  = htonl(INADDR_ANY);

	if(bind(m_servSocketDate, (struct sockaddr*)&serverAddr, sizeof(serverAddr)))
        cout<<"Date Socket bind Failed!\n";
    if(listen(m_servSocketDate, 8)!= 0)
        cout<<"Date Socket Listen Failed!\n";

    cout<<"Date Prepared ALL Success!"<<endl;
    while(1)
    {
        int lenAddr = sizeof(clientAddr);
        SOCKET _policy = accept(m_servSocketDate, (struct sockaddr*)&clientAddr, &lenAddr);
        for(;;)
        {
        cout<<"等待客户端数据\n";
        int len = recv(_policy, recvbuf, 1000, 0);
        cout<<"The length of Accept: "<<len<<endl;
        cout<<recvbuf<<endl;
        /*cout<<"该我发数据了:"<<endl;
        memset(recvbuf, 0, 1000);
        gets(recvbuf);
        send(_policy, recvbuf, strlen(recvbuf), 0);
        */
        }

    }


}


策略文件

<?xml version="1.0" encoding ="utf-8"?>
<access-policy>
  <cross-domain-access>
    <policy>
      <allow-from>
        <domain uri="*" />
      </allow-from>
      <grant-to>
        <socket-resource port="4502-4534" protocol="tcp" />
      </grant-to>
    </policy>
  </cross-domain-access>
</access-policy>



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值