兄弟我最近在研究flex+java+socket,第一次交互已经完成了,客户端请求策略文件,服务器发送策略文件给客户端,解决了沙箱安全的问题,但是碰到一个很奇怪的问题 就是客户端和服务端通讯了一次后(策略请求不算) 服务端就得不到客户端的消息了 一直会卡在server.accept() 也就是在等客户端的请求 但是我明明已经发了请求过去了 想请教下各位。。。。
以下是java服务端
package com.medou;
import java.io.*;
import java.net.*;
public class Server {
private ServerSocket server;
private BufferedReader reader;
private BufferedWriter writer;
Socket client;
private String xml;
public Server()
{
xml="<?xml version=\"1.0\"?><cross-domain-policy><site-control permitted-cross-domain-policies=\"all\"/>"
+"<allow-access-from domain=\"*\" to-ports=\"*\"/>"
+"</cross-domain-policy>";
System.out.println(xml);
//启动843端口
createServerSocket(843);
}
//启动服务器
private void createServerSocket(int port)
{
try {
server = new ServerSocket(port);
System.out.println("服务监听端口:" + port);
while(true) {
//接收客户端的连接
client = server.accept();
InputStreamReader input = new InputStreamReader(client.getInputStream(), "UTF-8");
reader = new BufferedReader(input);
OutputStreamWriter output = new OutputStreamWriter(client.getOutputStream(), "UTF-8");
writer = new BufferedWriter(output);
//读取客户端发送的数据
StringBuilder data = new StringBuilder();
char[] a = new char[50];
System.out.println("11111");
int j = reader.read(a);
for(int i=0;i<j;i++) {
System.out.print(a[i]+",");
if (a[i] != '\0') {
data.append(a[i]);
} else {
break;
}
}
String info = data.toString();
System.out.println("输入的请求: " + info);
//接收到客户端的请求之后,将策略文件发送出去
if(info.indexOf("<policy-file-request/>")>=0)
{
writer.write(xml + "\0");
writer.flush();
writer.close();
reader.close();
client.close();
}
else
{
System.out.println("dasdas");
writer.write("0");
writer.flush();
}
}
} catch (Exception e) {
e.printStackTrace();
} finally {
//调用垃圾收集方法
try
{
if(reader != null){
reader.close();
reader=null;
}
System.out.println("dad");
if(writer != null){
writer.close();
writer=null;
}
if (client != null) {
client.close();
client = null;
}
} catch(Exception ie){}
//System.gc();
}
}
//测试主函数
public static void main(String[] args)
{
new Server();
}
}
以下是flex客户端
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"
creationComplete="initApp()">
<mx:Script>
<![CDATA[
import flash.net.Socket;
import flash.utils.ByteArray;
import flash.events.ProgressEvent;
private var socket:Socket;
private var intClient:int;//定义客户端数字出拳
private var intServer:int;//定义服务端数字出拳
private var intSY:int;//定义输赢判断
private var strClient:String;//客户端文字出拳
private var strServer:String;//服务端的文字出拳
internal function initApp():void
{
//Security.loadPolicyFile("http://localhost:9000/crossdomain.xml");
//Security.loadPolicyFile("xmlsocket://localhost:8888");
socket=new Socket();//创建Socket对象
socket.connect("localhost",843);//连接服务器
socket.addEventListener(Event.CONNECT,funConnect);//监听是否连接上服务器
socket.addEventListener(Event.CLOSE,funClose);//监听套接字连接是否关闭
//socket.addEventListener(ProgressEvent.SOCKET_DATA,funSocket);//监听服务器的新信息
}
internal function funConnect(event:Event):void
{
myText.text+="连接已建立\n";
}
internal function funClose(event:Event):void
{
myText.text+="连接已关闭\n";
}
internal function sendMessage(msg:String):void
{
try{
socket.writeUTFBytes(msg);
socket.flush();
}catch(e:IOError){//没有连上服务器就发送数据,会发生IOError异常
trace("未连接服务器");
}
intClient=int(msg);
switch(intClient)//将数字转换成文字用于发布到屏幕上
{
case 0:
strClient="剪刀";
break;
case 1:
strClient="锤";
break;
case 2:
strClient="包袱";
break;
}
myText.text+="你出:"+strClient+"\n";
//myInput.text="";
}
internal function funSocket(event:ProgressEvent):void//接到服务器信息
{
var msg:String="";
while(socket.bytesAvailable) {
msg+=socket.readUTFBytes(socket.bytesAvailable);
}
socket.writeUTFBytes("2");
socket.flush();
myInput.text=msg;
intServer=int(msg);
intSY=intClient-intServer;//通过数值判断输赢
switch(intServer)//将数字转换成文字用于发布到屏幕上
{
case 0:
strServer="剪刀";
break;
case 1:
strServer="锤";
break;
case 2:
strServer="包袱";
break;
}
myText.text+="服务器出:"+strServer+"\n";
//判断输赢的算法
if(intSY>0&&intSY<2)
{
myText.text+="结果:你赢了\n";
}else if(intClient==intServer)
{
myText.text+="结果:平手\n";
}else if(intSY<0&&intSY>-2)
{
myText.text+="结果:你输了\n";
}else if(intSY>=2)
{
myText.text+="结果:你输了\n";
}else if(intSY<=-2)
{
myText.text+="结果:你赢了\n";
}
myText.verticalScrollPosition = myText.maxVerticalScrollPosition;// myText滚动到最下面
}
]]>
</mx:Script>
<mx:TextArea x="10" y="32" width="331" height="263" id="myText"/>
<mx:TextInput x="10" y="303" width="245" id="myInput"/>
<mx:Button x="273" y="304" label="发送" id="myBtn" click="sendMessage(myInput.text)"/>
<mx:Label x="10" y="10" text="规则:0代表剪刀;1代表锤;2代表包袱" width="331" fontWeight="bold"/>
</mx:Application>
分享到:
相关推荐
总之,Flex+Java+Socket聊天室实例源码提供了一个学习和实践网络编程、客户端-服务器通信以及富互联网应用程序开发的宝贵机会。通过研究和修改这个项目,开发者可以深入理解相关技术,并具备构建类似应用的能力。
### Flex + Java 的 Socket 通信知识点解析 #### 一、概览 在现代软件开发中,前后端分离架构越来越受到青睐。...以上就是关于 Flex + Java 的 Socket 通信的详细介绍,希望对理解和实现此类项目有所帮助。
设置服务端IP和端口 <br>----------------------------- chat 客户端代码 FLEX3 开发 ChatServer Delphi6 开发的服务端 Server java 开发的服务端 WindowsApplication1 C# 开发的服务端 <br>...
JsSocket 是使用js + flex + java开发的一套基于web的socket通信组件 主要解决大家在开发web项目时需要用到前台与后台时时通信时的问题,除了HTML5的WebSocket之外,之前大家使用的方法一般为:1、页面间断刷新;2、...
本项目"Flex+Java开发拓扑图"是一个利用Flex作为前端展示层,Java作为后端数据处理层来实现动态拓扑图的应用实例。 Flex是一种基于ActionScript(AS)的开源框架,主要用于创建富互联网应用程序(RIA)。它允许...
Flex+Java上传开发工具包是用于构建Web应用中文件上传功能的一种技术组合。在这个工具包中,主要包括两个关键的库文件:comm-fileupload1.2.jar和comm-io.jar。这两个库文件分别扮演着不同的角色,共同协作以实现...
标题中的“flex与java采用socket方式通信”是指在开发分布式应用程序时,使用Adobe Flex作为前端UI框架,通过Socket协议与Java后端服务器进行数据交互的一种技术实现。Flex是一款基于ActionScript的开源框架,用于...
在这个“java+flex基于socket的聊天案例”中,我们将深入探讨如何利用Java作为服务器端技术,Flex作为客户端展示层,通过Socket通信实现一个简单的聊天应用程序。 Java在后台处理业务逻辑和网络通信,它提供了...
### Flex和Java的Socket通信详解 #### 一、引言 在互联网应用开发中,不同技术栈之间的通信是非常重要的一个环节。本篇文章将详细介绍如何利用Flex和Java进行Socket通信,并通过具体的实例展示整个过程。 #### 二...
总的来说,Flex与Java通过Socket通信涉及到的技术包括Flex客户端的ActionScript编程、Java服务器的Socket编程、网络协议的理解以及可能的开发和调试工具的使用。这个主题对于构建实时交互的Web应用程序,尤其是在...
Flex与Java Socket通信是Web应用程序开发中的一个重要技术,它允许客户端和服务器之间进行实时、双向的数据交换。在本文中,我们将深入探讨如何实现Flex客户端与Java服务器之间的Socket通信。 首先,确保你拥有以下...
在这个系统中,Flex4作为客户端开发工具,提供了丰富的图形用户界面(GUI)和交互体验,而Java则在服务器端负责处理数据传输和业务逻辑。 1. **Flex4**:Flex4是Adobe开发的一套用于构建富互联网应用程序(RIA)的...
本示例探讨了如何使用Adobe Flex作为客户端,通过Socket接口与Java实现的多线程Socket服务端进行通信。以下是对这个主题的详细解释: 首先,Flex是一种开放源代码的富互联网应用程序(RIA)开发框架,它允许开发者...
【JSP+Flex+JavaSocket+jQuery+Ajax聊天】是一个技术综合的应用实例,它整合了多种前端和后端技术,为用户提供类似QQ的聊天体验。下面将分别介绍这些技术及其在聊天应用中的作用。 **JSP(JavaServer Pages)**是...
Flex与Java通信是Web开发中的一个重要领域,它允许前端用户界面(UI)通过富互联网应用程序(RIA)与后端服务器进行交互。Flex是Adobe开发的一种用于构建动态、交互性强的Web应用的开源框架,主要基于ActionScript...
《Flex + ASP.NET Web应用开发实战详解 Code P2》是一本深入探讨如何使用Adobe Flex与Microsoft ASP.NET技术相结合,构建高效、交互性强的Web应用程序的书籍。本部分(P2)可能聚焦于实际代码实现和高级功能的应用。...
Flex和Java Socket聊天源码是实现在线实时通信的一种技术结合,主要涉及的技术点包括Flex前端开发、Java后端Socket编程以及图文混排和表情支持。下面将详细解释这些知识点。 1. Flex:Flex是由Adobe公司开发的一套...
网络游戏五子棋源码是开发在线游戏的一种实例,它结合了Flex技术和Java语言,为学习者提供了深入理解网络编程和游戏逻辑的宝贵资源。Flex是一种基于Adobe Flash平台的开源框架,用于构建富互联网应用程序(RIA),...
本文将深入探讨Flex中Socket开发的关键知识点,包括如何连接到Java和C++的Server Socket,以及在实际应用中的注意事项。 1. Flex Socket API Flex SDK提供了一个名为`flash.net.Socket`的类,它允许我们创建客户端...