代碼如下:
</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 可執行文件。
下載頁面如下: