文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

java与as3的socket通信

2023-01-31 01:44

关注

as3 与java 都提供了Socket类用于网络通信, 但两者的使用也有较大的不同. 为了方便两者的通信, 我在做了一些实验的基础上, 写下获得的经验,以免忘记.

as3 的socket 读写数据方法常用的有四个: readUTF, writeUTF, readUTFBytes, writeUTFBytesjava 的socket 输入输出流常用BufferedReader 和 DataOutputStream 包装, 以提高读写效率
如:
    BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream(),     "UTF-8"));
    DataOutputStream writer = new DataOutputStream(socket.getOutputStream());

as3 方写数据时用writeUTFBytes 方法, 此时java 方读数据用reader.readLine() 阻塞式方法.
as3 方写数据时用writeUTF方法, 此时java 方应改用DataInputStream 类包装输入流, 因为BufferedReader 不提供读取UTF数据的方法.
java 方写数据时用writeUTF方法, 此时as3 方读数据用readUTF方法, 但此种模式有个弊端, 就是如果java方连续调用了n(n >= 2)次writeUTF方法,而as3方因来不及读取, 则最后只是第一次写入的数据被读取.
java 方写数据时用writeBytes, 此时as3 方读数据用readUTFBytes方法读取数据, 可以这样读取: msg = socket.readUTFBytes(socket.bytesAvailable).

一个简单的例子:
// as3 写的客户端

package test
{
   
   
    import flash.display.MovieClip;
    import flash.net.Socket;
    import flash.events.ProgressEvent;
    import flash.events.IOErrorEvent;
   
    public class  TestSocket extends MovieClip
    {
        private var socket:Socket;
        private var msg:String;
       
        public function TestSocket() {
            init();
        }
       
        private function init() {
            socket = new Socket("localhost", 60000);
            socket.addEventListener(ProgressEvent.SOCKET_DATA, readMsg);
            socket.addEventListener(IOErrorEvent.IO_ERROR, errorHandler);
        }
       
        private function readMsg(e:ProgressEvent) {
            msg = socket.readUTF();
            trace("message:" + msg);
        }
       
        private function errorHandler(e:IOErrorEvent) {
            trace(e.toString);
        }
    }
   
}


//java 写的服务器端

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;


public class TestSocket {
   
    private ServerSocket socketServer;
    private Socket client;
    private DataOutputStream writer;
    private BufferedReader reader;
   
    public static void main(String[] args) {
        int socketPort = 60000;
        TestSocket test1 = new TestSocket(socketPort);
    }
   
    public TestSocket(int socketPort) {
        try {
            socketServer = new ServerSocket(socketPort);
            System.out.println("server is setted up");
            while (true) {
                client = socketServer.accept();
               
                //wrap input and output stream
                writer = new DataOutputStream(client.getOutputStream());
                reader = new BufferedReader(newInputStreamReader(client.getInputStream()));
               
                //send message to client
                writer.writeUTF("hello client");
               
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}


阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯