加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

用golang解决 Flash AS3 的 socket 安全策略文件问题

发布时间:2020-12-16 18:56:25 所属栏目:大数据 来源:网络整理
导读:代码如下: /preprepackage mainimport ("bufio""fmt""net""os""time")const (Head = 4)var (ClientMap map[int]net.Conn = make(map[int]net.Conn))func main() {fmt.Println(os.Args[0])ip_port := "127.0.0.1:843"if len(os.Args) 1 {ip_port = os.Args[1

代码如下:

</pre><pre>package main

import (
	"bufio"
	"fmt"
	"net"
	"os"
	"time"
)

const (
	Head = 4
)

var (
	ClientMap map[int]net.Conn = make(map[int]net.Conn)
)

func main() {
	fmt.Println(os.Args[0])
	ip_port := "127.0.0.1:843"
	if len(os.Args) > 1 {
		ip_port = os.Args[1]
	}
	fmt.Println(
		"nFlash AS 策略服务运行中...n自动回应SocketXml端口(即843端口)的crossdomain.xml请求n如需指定ip和端口,可以在程序启动时指定参数,格式如下ngameserver843.exe 192.168.101.139:843","n当前正在侦听",ip_port,"n请不要关闭此窗口...")
	tcpAddr,err := net.ResolveTCPAddr("tcp4",ip_port)
	checkError(err)
	listener,err := net.ListenTCP("tcp",tcpAddr)
	checkError(err)
	clientIndex := 0

	for {
		clientIndex++
		conn,err := listener.Accept()
		if err != nil {
			continue
		}
		go handleClient(conn,clientIndex)
	}
}

func handleClient(conn net.Conn,index int) {
	ClientMap[index] = conn

	fmt.Println("")
	fmt.Println("=======================")
	fmt.Println("新用户连接,来自: ",conn.RemoteAddr(),"index: ",index)
	fc := func() {
		time.Sleep(time.Second) //给客户端1秒的响应的时间,否则客户端有可能读不到数据就提前Close了
		conn.Close()
		delete(ClientMap,index)
		fmt.Println("移除序号为: ",index,"的客户端,断开客户端的连接")
		fmt.Println("=======================")
	}
	defer fc()
	sendFirstMsg(conn)
}
func sendFirstMsg(conn net.Conn) {
	str := `<?xml version="1.0"?>
			<!DOCTYPE cross-domain-policy SYSTEM "/xml/dtds/cross-domain-policy.dtd">
			<cross-domain-policy>
				<site-control permitted-cross-domain-policies="master-only"/>
				<allow-access-from domain="*" to-ports="*" />
			</cross-domain-policy>`
	writer := bufio.NewWriter(conn)
	writer.WriteString(str)
	writer.Flush()
	fmt.Println("已经回应策略文件:crossdomain.xml")
}
func checkError(err error) {
	if err != nil {
		fmt.Println(err.Error())
		os.Exit(1)
	}
}


装好golang环境,然后直接 go run main.go 就行了。

当然,也可以直接下载我编译好的 exe 可执行文件。

下载页面如下:

https://github.com/moketao/XmlSocket_843

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读