经过大概2周的时间,做完了1个JAVA做服务器FLASH做客户端的交互例子。期间碰到些麻烦事,总结下做个记录。

1.安全域问题,当服务器在本地启动的时候,如果没有进行对应配置直接让FLASH访问服务器的对应端口会出现安全错误。解决方法很简单,在服务端简历843线程(FLASH访问SOCKET会自动去该线程申请域策略文件),当发现该线程有FLASH访问的时候,服务端发送回一个域策略安全的XML即可。

2.因为JAVA服务端是多线程的,因此涉及到线程池的使用,这里用了JDK1.5自带的,很方便。使用线程池可以减少内存的损耗并且增加并发性。

3.粘包问题,当服务端几乎在同一时间向一个客户端发送多条SOCKET的时候,有时候会出现客户端只收到1条完整的,其他的被抛弃掉了。解决办法,服务端发送SOCKET的同时先检测要发送的东西的长度,生成一个4位的长度头加在信息前面。当客户端读取到得时候先根据长度头去读长度,然后再读对应的长度的消息。当读完对应长度后如果还有消息则就可以判定是粘包了,这时继续重新读长度头然后再读信息即可。

4.中文问题。

写入的时候用:

var message:ByteArray=new ByteArray();
message.writeUTFBytes(txt +"/r/n");
//写入数据,writeUTFBytes方法,以utf-8格式传数据避免中文乱码

socket.writeBytes(message);
//写入Socket的缓冲区
socket.flush();

读出的时候用:

socket.readBytes(bytes, bytes.length , msgLen);

这样一读一写基本能保证中文正常。(之前发现过当写入的时候是UTF-8,读出必须用socket.readMultiByte(socket.bytesAvailable,"utf-16");来读才能读出中文,不然就是乱码的奇怪问题)

5.当采用3的方法发送信息的时候,粘包问题解决的手段需要注意删除多余的结束字符,即用lsStr = lsStr.slice(0,lsStr.length - 2);这样的形式来删除掉最后的"/n"。同时要注意因为中文在FLASH和JAVA里1位都只算1长度,因此在服务器端算长度头的时候要针对中文进行操作。

private int getStrLength(String _str) {
   int len = 0;
   for (int j = 0; j < _str.length(); j++) {
    int code = _str.charAt(j);
    if ( code < 0 || code > 255) {
     len += 2;
    } else {
     len += 1;
    }
   } 
   return len;
  }

JAVA的处理方式。

付个例子:http://flash.9ria.com/thread-34479-1-1.html

java做服务端,FLASH做客户端交互总结相关推荐

  1. netty既做服务端又做客户端_网易新闻客户端广告怎么做

    网易新闻客户端广告怎么投放? l  网易新闻客户端是网易公司为亿万用户打造的一款移动资讯类APP. l  敢于评论社会新闻的人群必定是一群有质量的人群. l  以"激发每个人思考,态度就在你 ...

  2. netty既做服务端又做客户端_背景墙别搞那么复杂!这样做既好看,性价比又高...

    作为体现风格的重要手法之一,墙面包装,也就是我们常听说的软包或者硬包,在很多家装当中都能看到.但是,墙面包装需要打基础框架,填充材料,还要做好表面处理等等,不仅工序多,一些材料的费用也不便宜.那怎么才 ...

  3. java sslsocket程序_JAVA与C++进行sslsocket通信,JAVA做服务端或客户端

    前几天有位网友问我关于Unity3D里面使用Protobuf的方法,一时有事拖到现在才写这篇文章,不好意思哈. 本文测试环境: 系统:WINDOWS 7(第3.6步).OS X 10.9(第4步) 软 ...

  4. java服务端开发 php_PHP使用thrift做服务端开发

    php中文网最新课程 每日17点准时技术干货分享 php使用thrift做服务端开发 thrift采用接口描述语言定义和创建服务,用二进制格式传输数据,体积更小.效率更高,对于高并发.数据量大和多语言 ...

  5. Socket编程,自己电脑做服务端和客户端

    相信直接编写简单的Socket客户端和Socketserver服务端很多人都会写,并且发现代码没什么错误,只是自己不知道运行出错原因在哪里.这里我就总的把我遇到的问题说一下,大神请过,像我一样的渣渣可 ...

  6. 基于TCP/IP协议的Java服务端与Android客户端的Socket通信及数据交互

    基于TCP/IP协议的Java服务端与Android客户端的Socket通信及数据交互 一.前言 1.Java服务端程序代码的项目名为TcpSocketServerOfJava,包名为com.exam ...

  7. PHP服务端、Unity客户端 双端基础源码做avalon阿瓦隆桌游面sha(类似狼人游戏)支持WebGL、小程序发布

    文章目录 PHP服务端发布(Windows下演示) Windows 安装PHP 启动服务器 Linux家族 Unity客户端发布 发布Windows客户端 发布WebGL端 演示 源码解析 联系作者 ...

  8. websocket服务端和html客户端进行二进制数据交互

    一.概念和理论理解 1.HTTP HTTP 是基于请求响应式的,即通信只能由客户端发起,服务端做出响应,无状态,无连接. 无状态:每次连接只处理一个请求,请求结束后断开连接. 无连接:对于事务处理没有 ...

  9. ET篇:ETBook笔记(1.2 为什么使用C# .net core做服务端?)

    GitHub原地址:为什么使用C# .net core做服务端? 黑体字为作者(熊猫大佬)原创,红色为个人理解 游戏服务端从早期的单服到分布式,开发越来越复杂,对稳定性,开发效率要求越来越高.开发语言 ...

  10. 【Android 开发】: Android客户端与服务端之间使用JSON交互数据。

    在前面的两讲中,我们讲解了JSON数据格式的一些基本知识,以及做一些小Demo,这一讲我们在前面的基础上来做一个综合的可扩展的Demo,主要是针对Android客户端解析服务端传递过来的JSON数据. ...

最新文章

  1. C# System.Guid.NewGuid() 格式化
  2. log_archive_dest_1设置报错
  3. ML之分类预测:机器学习中多分类预测数据集可视化(不同类别赋予不同颜色)设计思路及代码实现
  4. 函数指针也可作为函数的参数
  5. MFC自定义消息的实现方法
  6. Let's go home(HDU-1824)
  7. pytorch 如何使用cuda
  8. matlab编程求平均,matlab中的分组平均函数grpstats的用法
  9. c# string 转 datetime_利用swig封装C++的dll为C#方便使用
  10. PHP 使用rabbitmq 入门教程
  11. 全自动抠图换背景软件下载_抠图换背景app
  12. 2010最有趣牛人语录100句
  13. linux磁盘存储和文件管理进阶
  14. rw_semaphore 原理与代码分析
  15. web大学生个人网站作业模板——上海旅游景点介绍网页代码 家乡旅游网页制作模板 大学生静态HTML网页源码
  16. Unity对H5小游戏开发的支持——Project Tiny
  17. 【erlang】【rebar依赖】添加eredis依赖
  18. 下载pytorch的经历(20220514)
  19. 古董电脑室:2019日记簿(二)
  20. 金三银四求职季,前端面试题小梳理(HTML、CSS、JS)

热门文章

  1. 实用最优化方法课后习题-第二章
  2. 百变红茶的10种搭配喝法
  3. 四个月的写作之路No.22
  4. python中split_python中split是什么意思
  5. 万网m3 windows linux切换,万网M3-linux虚拟主机开启网页Gzip压缩方法
  6. 数字孪生开发 数字孪生用什么软件实现
  7. Oracle EBS Interface/API(35) -创建供应商地点API
  8. 有时候来不及去菜场,我就会给多头绒泡菌叫外卖,它真的很喜欢吃平菇 | 曳尾菌 一席第719位讲者...
  9. BUUCTF WEB Havefun
  10. cas113995-55-4/花菁染料1,1,2-三甲基-1H-苯并吲哚-7-磺酸