微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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,acceptpoly,(LPVOID)0,NULL);//创建线程
	myDateThread  = CreateThread(NULL,acceptDate,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,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,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,1000);
            int readCount = fread(recvbuf,sizeof(recvbuf),1,pfile);
            send(_policy,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,1000);
    if((m_servSocketDate = socket(AF_INET,0))==INVALID_SOCKET)
        cout<<"Date Socket Creat Failed!\n";
	sockaddr_in serverAddr;
	memset((char*)&serverAddr,sizeof(serverAddr));
	serverAddr.sin_family       = AF_INET;
	serverAddr.sin_port         = htons(4530);
	serverAddr.sin_addr.s_addr  = htonl(INADDR_ANY);

	if(bind(m_servSocketDate,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,0);
        cout<<"The length of Accept: "<<len<<endl;
        cout<<recvbuf<<endl;
        /*cout<<"该我发数据了:"<<endl;
        memset(recvbuf,1000);
        gets(recvbuf);
        send(_policy,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>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐