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 }