flash 代码
stop();
//用户名
var userName:String;
//声明一个socket
var mySocket:XMLSocket = new XMLSocket();
Security.loadPolicyFile("http://127.0.0.1/flash.xml");
loginBtn.onPress = function()
{
//如果没有输入用户名
if(nameText.text.length ==0)
{
clew.text = "<font color=\"#FF0000\">请输入用户名!</font>";
}
else
{
userName = nameText.text;

//连接到服务器
mySocket.connect("localhost", 5000);
}
}
//事件,当连接服务器成功或者失败时加载的
mySocket.onConnect = function(myStatus)
{
if (myStatus)
{
play();
}
else
{
clew.text = "<font color=\"#FF0000\">连接失败!</font>";
}
};function sendMessage(msg:String)
{
mySocket.send(msg + "\n");
}
xml代码:
<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM "/xml/dtds/cross-domain-policy.dtd">
<!-- Policy file for xmlsocket://socks.example.com -->
<cross-domain-policy>
   <!-- This is a master-policy file -->
   <site-control permitted-cross-domain-policies="master-only"/>
   <!-- Instead of setting to-ports="*",
administrators can use ranges and commas -->
   <!-- This will allow access to ports 123, 456, 457, and 458 -->
   <allow-access-from domain="localhost" to-ports="5000" />
   <allow-access-from domain="127.0.0.1" to-ports="5000" />
</cross-domain-policy> 
java代码:
package Server;import java.net.Socket;
import java.net.ServerSocket;
import java.io.PrintWriter;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Map;
import java.util.HashMap;
import java.util.Iterator;
/*
 *
 */
public class ServerThread extends Thread
{
private Map map;
private Socket socket;
private BufferedReader br;
private PrintWriter pw;
private String userName; public ServerThread(Socket socket,Map map,String userName)
{
this.socket = socket;
this.map = map;
this.userName = userName;
} public void run()
{
System.out.println(userName + "启动一个线程了!");
try
{
//建立接受信息
br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
while(true)
{
//接收信息
String message = br.readLine();
//发送给新用户的标记;
message=message.replace("<policy-file-request/>","");
//System.out.println("收到的消息:" + message);
if(message.trim().startsWith("newUser"))
{
//System.out.println(userName + "线程信息!再此收到的信息:" + message);
//取出最新登陆用户
Socket socketTemp  = (Socket)map.get("newUser");
sendMessage(socketTemp,message);
}
else
{
//向所有的用户发送当前用户登陆的信息
map.remove("newUser");
for(Iterator it = map.values().iterator(); it.hasNext();)
{
Socket socketTemp  = (Socket)it.next();
//自己除外的所有用户
if(socketTemp != socket)
{
sendMessage(socketTemp,message);
}
}
}
}
}
catch (Exception e)
{
//异常处理,当有用户异常退出时,向其他用户发出退出命令
System.out.println(userName + "出现异常了");

//删除出现异常的username
map.remove(userName);
if(!map.isEmpty())
{
try
{
System.out.println("发送该用户退出命令");
sendAllUser(map,"exit:" + userName );
}
catch (Exception ee)
{
System.out.println("用户退出异常!ee:" + ee);
}

}
System.out.println("线程错误:");
}
}
public void sendAllUser(Map map,String msg) throws Exception
{
for(Iterator it = map.values().iterator(); it.hasNext();)
{
Socket socketTemp  = (Socket)it.next();
//自己除外的所有用户
if(socketTemp != socket)
{
sendMessage(socketTemp,msg);
}
}
}
public void sendMessage(Socket so,String msg) throws Exception
{
PrintWriter tempPw = new PrintWriter(so.getOutputStream());
System.out.println("msg:" + msg);
tempPw.print(msg + "\0");
tempPw.flush();
}
}
主程序:
package Server;/*
 * $Id: .java $ 
 *
 * @author  soda [email protected]
 * @version  1.0
 * <br>Copyright 2005-2006 The SDK-I Studio
 * <br>This program is protected by copyright laws.
 * <br>Program Name:
 * <br>Date:
 */import java.net.Socket;
import java.net.ServerSocket;
import java.io.PrintWriter;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Map;
import java.util.HashMap;
import java.util.Iterator;
/*
 *
 */public class Server 
{
//存放所有用户位置的map
private Map map;
private BufferedReader br;
private static Server server; public Server()
{
map = new HashMap();
} public static Server instance()
{
if(server == null)
{
server = new Server();
}
return server;
}
public void start()
{
String xml = "<?xml version=\"1.0\"?><cross-domain-policy><site-control permitted-cross-domain-policies=\"all\"/><allow-access-from domain=\"*\" to-ports=\"*\"/></cross-domain-policy>\0";
try
{
ServerSocket serverSocket = new ServerSocket(5000);
while(true)
{
//新建一个连接
Socket socket = serverSocket.accept();
//把最新的用户连接存放起来
System.out.println("有用户登陆进来了");
//存放新进的用户
map.put("newUser",socket);
br = new BufferedReader(new InputStreamReader(socket.getInputStream(),"UTF-8"));
//接收用户名
String userName = br.readLine();
if (userName.equals("<policy-file-request/>")) {
System.out.println("接收policy-file-request");
userName=br.readLine();
}
System.out.println("userName" + userName);
//向所有的用户发送当前用户登陆的信息
for(Iterator it = map.values().iterator(); it.hasNext();)
{
Socket so = (Socket)it.next();
//如果当前的socket不为最新用户的socket时
if(so != socket)
{
PrintWriter pw = new PrintWriter(so.getOutputStream());

pw.print("newPerson:" + userName + "\0");
pw.flush();
}
}
//存放
map.put(userName,socket);
//启动线程
new ServerThread(socket,map,userName).start();
}
}
catch (Exception e)
{
System.out.println("服务器出现异常!");
}
}
public static void main(String[] args) throws Exception
{
instance().start();
}
}直接运行swf文件没有问题,放到iis下就有问题,在百度上查了是安全策略问题。javaflashsocket