最近在作一個flash小遊戲,
衆所周知,flash鏈接服務器socket的時候,須要向服務器請求策略文件。
如下是一個簡單的策略文件服務器的代碼c++:c++
1 #include <Winsock2.h> 2 #include <stdio.h> 3 #pragma comment(lib,"WS2_32.lib") 4 #define _CRT_SECURE_NO_WARNINGS 5 void main() 6 { 7 WSADATA wsd; 8 SOCKET server; //服務器socket 9 SOCKADDR_IN addrSrv; 10 SOCKADDR_IN addrClient; 11 SOCKET client; //鏈接的客戶端socket 12 char szPolicy[1024] = ""; 13 strcat_s(szPolicy, 1024, "<?xml version='1.0'?>"); 14 strcat_s(szPolicy, 1024, "<cross-domain-policy>"); 15 strcat_s(szPolicy, 1024, "<site-control permitted-cross-domain-policies='all'/>"); 16 strcat_s(szPolicy, 1024, "<allow-access-from domain='*' to-ports='*'/>"); 17 strcat_s(szPolicy, 1024, "</cross-domain-policy>"); 18 int len; 19 if (WSAStartup(MAKEWORD(2, 2), &wsd) != 0) 20 { 21 printf("start up failed!\n"); 22 return; 23 } 24 server = socket(AF_INET, SOCK_STREAM, 0); //建立socket 25 addrSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY); //設置地址 26 addrSrv.sin_family = AF_INET; 27 addrSrv.sin_port = htons(843); //設置端口號 28 bind(server, (SOCKADDR*)&addrSrv, sizeof(SOCKADDR)); //綁定 29 printf("flash策略文件服務器已啓動!\n"); 30 31 listen(server, 5); //設置最多鏈接數 32 int count = 0; 33 len = sizeof(SOCKADDR); 34 while (1) 35 { 36 client = accept(server, (SOCKADDR*)&addrClient, &len); //接收客戶端鏈接 37 char buff[1024] = ""; 38 recv(client, buff, 1024, 0); 39 szPolicy[strlen(szPolicy)] = '\0'; 40 send(client, szPolicy, strlen(szPolicy), 0); 41 closesocket(client); 42 count++; 43 printf("已成功返回%d個客戶端!", count); 44 } 45 WSACleanup(); 46 }