github.com/insionng/yougam@v0.0.0-20170714101924-2bc18d833463/modules/sock/FlashPolicyService.go (about)

     1  package sock
     2  
     3  import (
     4  	"bufio"
     5  	"log"
     6  	"net"
     7  	"time"
     8  )
     9  
    10  /*
    11  	Flash Policy Service必须在843端口提供服务
    12  	所以若果防火墙在此端口设置过拦截的话,那么防火墙须要设置开放843端口
    13  	sudo /sbin/iptables -I INPUT -p tcp --dport 843 -j ACCEPT
    14  */
    15  func FlashPolicyService() error {
    16  	hostPort := "0.0.0.0:843"
    17  	tcpAddr, err := net.ResolveTCPAddr("tcp4", hostPort)
    18  	if err != nil {
    19  		return err
    20  	}
    21  
    22  	listener, err := net.ListenTCP("tcp", tcpAddr)
    23  	if err != nil {
    24  		log.Fatal(err)
    25  	}
    26  
    27  	for {
    28  		conn, err := listener.Accept()
    29  		if err != nil {
    30  			continue
    31  		}
    32  		go handleClient(conn)
    33  	}
    34  
    35  }
    36  
    37  func handleClient(conn net.Conn) {
    38  
    39  	defer func() {
    40  		time.Sleep(time.Second) //等待客户端响应之时间
    41  		conn.Close()
    42  	}()
    43  
    44  	sendFlashPolicy(conn)
    45  
    46  }
    47  
    48  func sendFlashPolicy(conn net.Conn) {
    49  	//Flash Player会先到请求的843端口请求策略文件的内容,
    50  	//所以这里直接返回策略内容,而public目录不需要放置crossdomain.xml
    51  	/*
    52  			flashPolicy := `<?xml version="1.0"?>
    53  		<!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">
    54  		<cross-domain-policy>
    55  			<site-control permitted-cross-domain-policies="master-only"/>
    56  			<allow-access-from domain="*" to-ports="*" />
    57  		</cross-domain-policy>`
    58  	*/
    59  	FlashPolicy := `<?xml version="1.0"?>
    60  <cross-domain-policy>
    61    <allow-access-from domain="*" to-ports="*" />
    62  </cross-domain-policy>`
    63  	writer := bufio.NewWriter(conn)
    64  	writer.WriteString(FlashPolicy)
    65  	writer.Flush()
    66  }