AS和Java的Rpg开发
测试下怎么都可以,发布成exe文件,也没有任何问题,但是以html访问swf的方式连接,却总是连不上,出现Error #2048 的SecurityErrorEvent 错误信息
然后,就在java那头加了接收<policy-file-request/>的代码,但是还是不行,现在我把代码贴上来,请大家帮帮忙
java服务器
RPGServer.java
import java.net.*;import java.io.*;import java.util.*;public class RPGServer { private ServerSocket server; private Boolean serverStop = true; private RPGManager bMan = new RPGManager(); private int ServerCount = 0; private HashMap userList = new HashMap(); private HashMap userNameList = new HashMap(); public RPGServer() { } void startServer() { try { server = new ServerSocket(10000); System.out.println("RPGServer 建て終わりました"); while (true) { Socket socket = server.accept(); Chat_Thread chatThread = new Chat_Thread(socket, "socket" + ServerCount); chatThread.start(); userList.put("socket" + ServerCount, chatThread); bMan.add(socket); bMan.sendToSocket(socket, "socketId:socket" + (ServerCount++)); bMan.sendClientInfo(); } } catch (Exception e) { System.out.println(e); } } public static void main(String[] args) { RPGServer server = new RPGServer(); server.startServer(); } class Chat_Thread extends Thread { String msg; Socket socket; String socketId; String socketName; int x; int y; private BufferedReader reader; // private PrintWriter writer; private BufferedWriter writer; private String xml = "<?xml version="1.0" encoding="UTF-8"?>" + "<cross-domain-policy>" + "<allow-access-from domain='*' to-ports='*' />" + "</cross-domain-policy>"; Chat_Thread(Socket socket) { this.socket = socket; } Chat_Thread(Socket socket, String socketidvalue) { this.socket = socket; this.socketId = socketidvalue; } public void run() { try { reader = new BufferedReader(new InputStreamReader(socket .getInputStream(), "utf8")); writer = new BufferedWriter(new OutputStreamWriter(socket .getOutputStream(), "UTF-8")); // writer=new PrintWriter(socket.getOutputStream(),true); // String msg; while ((msg = reader.readLine()) != null) { System.out.println("RPGServer run msg = " + msg + msg.compareTo("<policy-file-request/>")); if(msg.compareTo("<policy-file-request/>") == 1){ System.out.println("RPGServer run "); writer.write(xml + "\0"); writer.flush(); }else if (msg.compareTo("stop") == 0) { System.out.println("stop"); serverStop = false; server.close(); } } } catch (Exception e) { e.printStackTrace(); System.out.println(e.getMessage()); } finally { try { bMan.remove(socket); if (reader != null) reader.close(); if (writer != null) writer.close(); if (socket != null) socket.close(); reader = null; writer = null; socket = null; userNameList.remove(socketName); userList.remove(socketId); bMan.sendToAll("deleteuser:" + socketName); System.out.println("お客様離れました"); bMan.sendClientInfo(); if (msg.compareTo("stop") == 0) { System.out.println("stop"); // serverStop = false; server.close(); } } catch (Exception e) { } } } }}class RPGManager extends Vector { RPGManager() { } void add(Socket sock) { System.out.println("add sock : " + sock); super.add(sock); } void remove(Socket sock) { super.remove(sock); } synchronized void sendToSocket(Socket sock, String msg) { System.out.println("sendToSocket sock : " + sock); BufferedWriter writer = null; try { writer = new BufferedWriter(new OutputStreamWriter(sock .getOutputStream(), "UTF-8")); if (writer != null) { writer.write(msg); writer.flush(); } } catch (Exception ie) { } } synchronized void sendToAll(String msg) { System.out.println("sendToAll run = " + msg); // PrintWriter writer=null; BufferedWriter writer = null; Socket sock; for (int i = 0; i < size(); i++) { sock = (Socket) elementAt(i); try { writer = new BufferedWriter(new OutputStreamWriter(sock .getOutputStream(), "UTF-8")); if (writer != null) { writer.write(msg); writer.flush(); } // writer=new PrintWriter(sock.getOutputStream(),true); } catch (Exception ie) { } } } synchronized void sendClientInfo() { String info = ":今の人数:" + size(); System.out.println(info); sendToAll(info); }}?as方面
public function con():void{ socket=new Socket(); socket.addEventListener(Event.CONNECT,onConnect, false, 0, true);//注册侦听函数 socket.addEventListener( IOErrorEvent.IO_ERROR , failConnect , false, 0, true); socket.addEventListener(Event.CLOSE,funClose); //监听连接关闭 socket.addEventListener( ProgressEvent.SOCKET_DATA, onSocketData ); socket.addEventListener(SecurityErrorEvent.SECURITY_ERROR, onSecurityError, false, 0, true); //socket.connect("127.0.0.1",10000);//连接Socket服务器 socket.connect("localhost",10000);//连接Socket服务器 } private function connect():void { socket.writeUTFBytes("login:" +_player.name + "\n"); socket.flush( ); } private function funClose(e:Event):void{ _worldTextBox.text =_worldTextBox.text + "\n" +"服务器关闭"; trace("服务器关闭"); } private function onConnect(e:Event):void{ _worldTextBox.text =_worldTextBox.text + "\n" +"服务器已经连接,正在验证用户"; } private function failConnect(ev:IOErrorEvent):void{ trace("error"); } private function onSocketData( event:ProgressEvent ):void { //trace( "Socket received " + socket.bytesAvailable + " byte(s) of data:" ); _worldTextBox.text =_worldTextBox.text + "\n" + "Socket received " + socket.bytesAvailable + " byte(s) of data:"; while ( socket.bytesAvailable ) { var string:String = socket.readUTFBytes(socket.bytesAvailable); _worldTextBox.text =_worldTextBox.text + "\n" + string; trace( "GameMap onSocketData string : " + string); } } private function onSecurityError(evt:SecurityErrorEvent):void { _worldTextBox.text =_worldTextBox.text + "\n" +"安全错误" + evt.toString() + "\n" + evt.text; } private function onClosed(evt:Event):void { _worldTextBox.text =_worldTextBox.text + "\n" +"服务器关闭"; }?