服务器代码:
package JSocket;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class Server {
private static final int PORT = 3000; // 端口号
private static List list = new ArrayList(); // 保存连接对象
private ExecutorService exec;
private ServerSocket server;
public static void main(String[] args) {
new Server();
}
public Server() {
try {
server = new ServerSocket(PORT);
exec = Executors.newCachedThreadPool();
System.out.println("服务器已启动!");
Socket client = null;
while (true) {
client = server.accept(); // 接收客户连接
list.add(client);
exec.execute(new ChatTask(client));
}
} catch (IOException e) {
e.printStackTrace();
}
}
static class ChatTask implements Runnable {
private Socket socket;
private BufferedReader br;
private String msg="";
public ChatTask(Socket socket) throws IOException {
this.socket = socket;
br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
}
public void run() {
new Thread(new Runnable() {
public void run() {
PrintWriter pw;
try {
pw = new PrintWriter(socket.getOutputStream(), true);
int i = 0;
while(true){
i=i+1;
msg=i+"\n";
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
pw.println(msg);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}).start();
}
}
}
客户端代码:
<?xml version="1.0" encoding="utf-8"?>
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600" applicationComplete="initApp()">
fx:Script
<![CDATA[
import flash.net.Socket;
import mx.controls.Alert;
private var socket:Socket;
private function initApp():void
{
StartTest();
}
private function StartTest():void
{
socket = new Socket("127.0.0.1",3000);
// socket.addEventListener(Event.CONNECT, connectHandler);
socket.addEventListener(ProgressEvent.SOCKET_DATA, socketDataHandler);
}
private function CloseTest():void
{
if(socket!=null && socket.connected)
{
trace("socket.connected:"+socket.connected);
socket.close();
trace("socket.connected:"+socket.connected);
}
}
// private function connectHandler(event:Event):void
// {
// trace("connectHandler: " + event);
// socket.writeMultiByte(SendStr.text,"GB2312");
// socket.flush();
// }
private function socketDataHandler(event:ProgressEvent):void
{
trace("socketDataHandler: " + event);
var str:String=socket.readMultiByte(socket.bytesAvailable,"GB2312");
[color=red]ExternalInterface.call("addValue",str);[/color]
// Alert.show(str);
// ReceiveStr.text = str;
}
private function alert():void{
for(var i:int=0;i ExternalInterface.call("addValue","success!"+i);
}
}
]]>
/fx:Script
/s:Application
jsp代码:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
Either scripts and active content are not permitted to run or Adobe Flash Player version
10.0.0 or greater is not installed.
你的问题在这里 在flash的安全机制中 localhost和127.0.0.1不是一个域 你可以统一使用localhost 或者 127.0.0.1 不要分开用 否则flash player会认为是不同的域 不同的域之间是需要策略文件的 不知道我说明白了
你访问的时候 试试使用http://127.0.0.1:9000/appname````
你是想使用flash的socket功能吧 js调用AS函数 as函数返回json给js 在js里面处理信息 这样没问题 你在火狐的错误控制台看看 是不是有什么地方报错了
在使用socket前 先从服务器加载一下策略文件 策略文件放置在服务器的跟目录
如果你的域名是是www.yourdomain.com的话 www.yourdomain.com/crossdomain.xml这样访问的话 是可以访问到策略文件的