
因为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 ServerSOCKET m_servSocket;SOCKET m_servSocketDate; //Date Serversockaddr_in clIEntAddr; //Date ClIEntsockaddr_in polyAddr; //poly ClIEntHANDLE 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>总结
以上是内存溢出为你收集整理的Silverlight网页客户端测试服务器程序 服务器测试程序全部内容,希望文章能够帮你解决Silverlight网页客户端测试服务器程序 服务器测试程序所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)