Flex通信-与Java实现Socket通信实例
Flex通信-与Java实现Socket通信实例 转自:http://blessht.iteye.com/blog/1136888
博客分类:
- 环境准备
- 实例效果
Java控制台:
- 注意事项
- Java Socket服务器
- public class SocketUtil {
- /**
- * 创建ServerSocket
- * @param port
- * @return
- */
- public static ServerSocket getServerSocket(int port){
- ServerSocket server = null;
- try {
- server = new ServerSocket(port);
- System.out.println("------ServerSocket创建成功,Port:"+port);
- return server;
- } catch (IOException e) {
- if(server!=null && !server.isClosed()){
- try {
- server.close();
- } catch (IOException e1) {
- e1.printStackTrace();
- }
- }
- throw new RuntimeException("创建ServerSocket时发生异常,Port:"+port,e);
- }
- }
- /**
- * 获取Socket
- * @param server
- * @return
- */
- public static Socket getSocket(ServerSocket server){
- Socket socket = null;
- try {
- socket = server.accept();
- System.out.println("------Socket连接成功,IP:"+socket.getInetAddress());
- return socket;
- } catch (IOException e) {
- if(socket!=null && !socket.isClosed()){
- try {
- socket.close();
- } catch (IOException e1) {
- e1.printStackTrace();
- }
- }
- throw new RuntimeException("创建Socket时发送异常",e);
- }
- }
- }
- public class SocketThread implements Runnable {
- private Socket socket;
- private String encoding;
- public SocketThread(Socket socket,String encoding) {
- this.socket = socket;
- this.encoding = encoding;
- }
- /**
- * 与客户端交互代码
- */
- @Override
- public void run() {
- try {
- BufferedReader br = new BufferedReader(new InputStreamReader(socket
- .getInputStream(), encoding));
- BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(
- socket.getOutputStream(), encoding));
- String getMsg;
- while ((getMsg = br.readLine()) != null && !"exit".equalsIgnoreCase(getMsg)) {
- // 客户端未提出"exit"命令,则循环交流
- System.out.println("From client message:" + getMsg);
- bw.append("你好[" + socket.getInetAddress() + "],服务器收到你的信息:"
- + getMsg + "\r\n");
- bw.flush();
- }
- //客户端提出"exit"请求,关闭当前socket...
- br.close();
- bw.close();
- socket.close();
- System.out.println("当前Socket连接结束......");
- } catch (Exception e) {
- if(!socket.isClosed()){
- try {
- socket.close();
- } catch (IOException e1) {
- e1.printStackTrace();
- }
- }
- throw new RuntimeException("Socket线程类发送异常...",e);
- }
- }
- }
- public static void main(String[] args) {
- new SocketServer().startSocket();
- }
- Flex客户端代码
- var socket:Socket = new Socket();
- socket.connect("localhost",);
第二种通过创建Socket实例时在构造函数中传入服务器ip和端口号连接:
- socket = );
- //ByteArray存放数据
- var message:ByteArray = new ByteArray();
- //使用UTF形式防止中文乱码
- message.writeUTFBytes(txt_socket.text+"\r\n");
- //数据写入缓冲区
- socket.writeBytes(message);
- Event.CONNECT:Socket与服务器成功连接时触发的事件
- Event.CLOSE:Socket与服务器断开连接时触发的事件
- IOErrorEvent.IO_ERROR:Socket通信时发生IO错误时触发的事件
- ProgressEvent.SOCKET_DATA:服务器返回数据时触发的事件
- <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
- xmlns:s="library://ns.adobe.com/flex/spark"
- xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600">
- <fx:Script>
- <![CDATA[
- private var socket:Socket = null;
- protected function button1_clickHandler(event:MouseEvent):void
- {
- if(socket==null || !socket.connected){
- //连接服务器(ip,port)
- socket = new Socket("localhost",10086);
- //成功连接状态事件
- socket.addEventListener(Event.CONNECT,function connFun(e:Event):void{
- l_status.text = "Connect to server success...";
- });
- //连接中断事件
- socket.addEventListener(Event.CLOSE,function closeFun(e:Event):void{
- l_status.text = "Connect to server closed...";
- });
- //连接异常事件
- socket.addEventListener(IOErrorEvent.IO_ERROR,function closeFun(e:IOErrorEvent):void{
- l_status.text = "Connect exception ..."+e.toString();
- });
- //服务器信息事件
- socket.addEventListener(ProgressEvent.SOCKET_DATA,function dataFun(e:ProgressEvent):void{
- var getMsg:ByteArray = new ByteArray;
- socket.readBytes(getMsg);
- l_result.text = getMsg.toString();
- });
- }
- //ByteArray存放数据
- var message:ByteArray = new ByteArray();
- //使用UTF形式防止中文乱码
- message.writeUTFBytes(txt_socket.text+"\r\n");
- //数据写入缓冲区
- socket.writeBytes(message);
- //将缓冲区数据发送出去
- socket.flush();
- //清空文本框内容
- txt_socket.text = "";
- }
- ]]>
- </fx:Script>
- <fx:Declarations>
- <!-- 将非可视元素(例如服务、值对象)放在此处 -->
- </fx:Declarations>
- <s:Button x="156" y="56" label="按钮" click="button1_clickHandler(event)"/>
- <s:TextInput x="20" y="56" id="txt_socket"/>
- <s:Label x="20" y="104" id="l_status"/>
- <s:Label x="234" y="65" id="l_result"/>
- </s:Application>
- 安全沙箱
1, 首先检测目标服务器的 843 端口是否提供安全策略
2, 如果 1 没有检测到策略,则检测 actionscript 是否使用了 Security.loadPolicyFile(xmlsocket://)手段提供安全策略,如果还没检测到,则使用第 3 步检测
3, 检测目标服务器目标端口是否提供安全策略。
第一个是验证的 Socket 和程序的 Socket 是两个 Socket 。所以你在本地测试时,服务端监听到 N 个 Socket 请求,但布置到服务端后,服务端会监听到 N+1 个请求。
第二是验证的 Socket 发送“ <policy-file-request/>\0 “请求和接收你的策略文件是没有先后关系的,所以你没必要接收完“ <policy-file-request/>\0 “后才发策略文件。我的做法是只要监听到请求,就把策略字符串发过去。
- /**
- * 处理与Flex认证的线程类
- * @author Administrator
- */
- public class PolicyThread implements Runnable {
- private final String policy_xml = "<policy-file-request/>";
- private final String cross_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";
- private Socket socket;
- public PolicyThread(Socket socket){
- this.socket = socket;
- }
- @Override
- public void run() {
- try {
- //接收并发送Flex安全验证请求
- BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
- PrintWriter pw = new PrintWriter(socket.getOutputStream());
- ];
- br.read(by, , );
- String s = new String(by);
- if(s.equals(policy_xml)){
- System.out.println("接收policy-file-request认证");
- pw.print(cross_xml);
- pw.flush();
- br.close();
- pw.close();
- socket.close();
- System.out.println("完成policy-file-request认证");
- }
- } catch (IOException e) {
- if(!socket.isClosed()){
- try {
- socket.close();
- } catch (IOException e1) {
- e1.printStackTrace();
- }
- }
- throw new RuntimeException("执行policy认证时发生异常",e);
- }
- }
- }
- public class PolicyServer implements Runnable{
- ;
- private boolean status = true;
- private ServerSocket server = null;
- @Override
- public void run() {
- //创建安全验证服务器
- server = SocketUtil.getServerSocket(policy_port);
- while(status){
- Socket socket = SocketUtil.getSocket(server);
- new Thread(new PolicyThread(socket)).start();
- }
- }
- /**
- * 启动服务器
- */
- public void startPolicy(){
- new Thread(this).start();
- }
- /**
- * 关闭服务器
- */
- public void stopPolicy(){
- status = false;
- if(server!=null && !server.isClosed()){
- try {
- server.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
- }
- Servlet启动ServerSocket
- public class InitServers extends HttpServlet {
- private static final long serialVersionUID = 1L;
- /**
- * @see HttpServlet#HttpServlet()
- */
- public InitServers() {
- super();
- }
- /**
- * @see Servlet#init(ServletConfig)
- */
- public void init(ServletConfig config) throws ServletException {
- new PolicyServer().startPolicy();
- new SocketServer().startSocket();
- }
- /**
- * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
- */
- protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- // TODO Auto-generated method stub
- }
- /**
- * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
- */
- protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- // TODO Auto-generated method stub
- }
- }
- <servlet>
- <display-name>InitServers</display-name>
- <servlet-name>InitServers</servlet-name>
- <servlet-class>socket.InitServers</servlet-class>
- <load-on-startup>1</load-on-startup>
- </servlet>
Flex通信-与Java实现Socket通信实例的更多相关文章
- Java的Socket通信简单实例
服务端 package testlxd; import java.io.BufferedReader; import java.io.IOException; import java.io.Input ...
- Java:Socket通信
Socket通常也称作"套接字".用于描写叙述IP地址和port,是一个通信链的句柄.应用程序通常通过"套接字"向网络发出请求或者应答网络请求. ServerS ...
- java的socket通信
本文讲解如何用java实现网络通信,是一个非常简单的例子,我比较喜欢能够立马看到结果,所以先上代码再讲解具体细节. 服务端: import java.io.BufferedReader; import ...
- Java的Socket通信----通过 Socket 实现 TCP 编程之多线程demo(2)
JAVA Socket简介 所谓socket 通常也称作”套接字“,用于描述IP地址和端口,是一个通信链的句柄.应用程序通常通过”套接字”向网络发出请求或者应答网络请求. import java.io ...
- C++服务器与java进行socket通信案例
分类: [java]2012-10-08 12:03 14539人阅读 评论(46) 收藏 举报 注:本代码版权所有!!!转载时请声明源地址:http://blog.csdn.net/nuptboyz ...
- java NIO socket 通信实例
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/zhuyijian135757/article/details/37672151 java Nio 通 ...
- java的Socket通信例子及关于java.net.SocketException: Socket is closed错误
今天写socket数据相互通信的时候,碰到一个及其蛋疼的错误.单向传输数据的时候server与client是没有问题的,但是两个都有输入输出操作的时候就出现了这个问题 java.net.SocketE ...
- Java实现Socket通信
一对一通信: 服务器端: public class ServerDemo { public static void main(String[] args) { ServerSocket serverS ...
- JAVA ANDROID SOCKET通信检测(SERVER)连接是否断开
Pre 解决思路 代码后记: 客户端app上的部分代码 调用: 服务器上: 客户端判断服务器是否还活着代码: PRE 在利用socket写通讯程序的时候,想检测服务器是否还活着. 从网上找了很多资料, ...
随机推荐
- YTU 2601: 熟悉题型——填空题(删除线性表节点)
2601: 熟悉题型--填空题(删除线性表节点) 时间限制: 1 Sec 内存限制: 128 MB 提交: 357 解决: 212 题目描述 给出一串具体长度的数据,删除指定数据. 已经给出部分代 ...
- NDK(4)"Unresolved inclusion jni.h”的解决方法
参考 : http://blog.csdn.net/zhubin215130/article/details/39347873 3种解决办法: 一,重新初始化eclipse对该project的nat ...
- [HDOJ3466]Proud Merchants(贪心+01背包)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3466 n个商人,每个商人有一个物品,物品有价格p.价值v还有一个交易限制q.q的意义是假如你现在拥有的 ...
- 反编译android APK
我们经常会在如下的情况使用反编译 1.看到别人应用中的酷炫功能,想知道是如何实现的 2.别人应用的素材排版好漂亮,想套用模仿 百度一下就已经有一大堆反编译的教程了,我还是坚持学习记录一下. A ...
- You can't specify target table 'charge' for update in FROM clause
mysql中不能这么用. (等待mysql升级吧)错误提示就是说,不能先select出同一表中的某些值,再update这个表(在同一语句中) 替 换方 案: create table tmp as s ...
- [ionic开源项目教程] - 第15讲 ionic用户个人中心登录注册的实现
第15讲 ionic用户个人中心登录注册的实现 这一讲包括登陆.注册.个人中心.个人资料页面的实现. 在一讲的改动有四个地方: 在config.js里配置接口地址 完善个人中心的服务层(service ...
- [转] gc tips(2)
原文地址:http://kevincao.com/2011/08/actionscript-garbage-collection-1/ 谈谈ActionScript垃圾回收(上) 在<给AS程序 ...
- <Liunx常用命令一>之TOP
一:作用 ----->TOP命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况. ----->TOP是一个动态显示过程,即可以通过用 ...
- 基于CentOS与VmwareStation10搭建Oracle11G RAC 64集群环境:2.搭建环境-2.4. 安装JDK
2.4.安装JDK 2.4.1.准备JDK 在百度搜索:JDK下载 2.4.2.上传JDK put E:\软件安装文件\jdk-8u11-linux-x64.rpm /home/linuxrac1/D ...
- Android通过代码获取View
View view = LayoutInflater.from(mContext).inflate(R.layout.song_item_adapter, null); LayoutInflater ...