文章分类 | 推荐文章 | 最新文章 | 热点文章 | 最新软件 | 精品软件 | 下载排行 | 推荐下载 | 免费看大片 | WPS | 杀毒软件
清风网络
首 页 软件下载 网络学院 数码学院
QQ 电脑入门 游戏 操作系统 图形处理 办公软件 媒体动画 精文荟萃 工具软件 网络编程 程序开发 网络技术 认证考试 网站建设 文章专栏
当前位置:清风网络学院网络编程J2EE/J2MEMIDP终端模拟之一:一个简单的模拟器MIDlet
精品推荐
特别推荐
·J2EE Web开发技术期待一次新的技术变革
·J2ME程序开发初学者快速入门的九大要点
·使用技巧:J2ME中程序优化的十个小方法
·RMS从入门到精通之一
·J2EE应用程序中SQL语句的自动构造方法
·解决J2EE系统应用性能问题常用优化项目
·J2EE实用技巧:提升JSP应用程序的绝招
·J2ME内存优
·J2ME简介
·J2EE技术
热点TOP10
·FC API(JSR 75)简单讲解
·J2ME程序开发初学者快速入门的九大要点
·游戏框架之心得体会(1)
·在J2EE中APPLET和HTML作为客户端的比较
·Eclipse入门?使用指南及开发Eclipse插件
·jboss配置系列第一天
·一个2D图形绘画的案例
·类似卫星扫描效果
·扫描屏幕和颜色渐变的效果
·一个基于MIDP的迷宫游戏

MIDP终端模拟之一:一个简单的模拟器MIDlet

日期:2008年6月6日 作者: 查看:[大字体 中字体 小字体]


注意,因为 telnet 采取 8 位的 ASCII 字符,而 Java 的字符是 16 位 Unicode,在发送前,我们必须注意将终端类型字符串的每个 Unicode 字符转换成 ASCII 字节。这个转换在几乎所有的 internet 协议中都是必需的,特别是早期协议。我们可以在对 String.getBytes() 的调用中指定 ASCII 编码,但由于这是非常简单的转换,我们可以内部完成它。虽然 MIDP 规范规定了要支持哪种字符编码,但不同的实现程序有时会出错,安全一些总比说抱歉要好。

在“协商窗口大小”(NAWS)情况下,我们只是简单地将屏幕尺寸通知给远程主机。终端应该使用等宽字体,所以屏幕是一个字符网格,具有固定的行数和列数。如果我们知道了屏幕的尺寸以及服务器支持 NAWS 选项,我们就可以在连接时发送屏幕的尺寸,并且如果屏幕尺寸改变了,以后可以再次发送。

正如 RFC 1073 规范所推荐的,当我们接收到 IAC DO NAWS 后,我们响应 IAC WILL NAWS,然后立即发送我们的当前屏幕尺寸。因为有时要求大于 255 的屏幕高度和宽度,所以宽度和高度分别作为两字节的整数发送:先是高位字节,然后是低位字节。这样我们发送 IAC SB NAWS width-high-byte width-low-byte height-high-byte height-low-byte IAC SE。代码如下:

    ...
    case WINDOW_SIZE:
        // do allow and reply with window size
        if ( b == DO && width > 0 && height > 0 )
        {
            reply[1] = WILL;
            write( reply );
            reply[1] = SB;
            write( reply );
            byte[] bytes = new byte[6];
            bytes[0] = (byte) (width >> 8);
            bytes[1] = (byte) (width & 0xff);
            bytes[2] = (byte) (height >> 8);
            bytes[3] = (byte) (height & 0xff);
            bytes[4] = IAC;
            bytes[5] = SE;
            write( bytes );
            break;
        }
    ...

在编写用户界面和知道窗口的宽度和高度之前,我们不能使用该代码。目前,我们只是简单地发送 IAC WONT NAWS

对于可用性而言,如果我们的类所需要做的所有工作就是从 InputStream 读取数据,那么类会很简洁。但是,我们还需要把数据送回服务器,所以我们需要 OutputStream 用于写入。因为我们支持终端类型和窗口尺寸选项,所以我们还需要所有这些传递给构造函数的信息。为了方便,我们使用了第二个构造函数,它只获取输入和输出流,默认的终端类型是“哑”终端,窗口高度和宽度是 0。

Telnet 输出流

与 telnet 输入流相比,TelnetOutputStream 可是很轻松的事。记住,虽然我们的应用程序可自由写入 255,就像其他任意数值一样,但是远程主机上的 telnet 服务器会尝试将其解释为 IAC,并且接着会查找命令代码。因此输出流的惟一职责是在其写入时注意具有值 255 的字节,如果有则再用一个 255 将其转义。

在这个 TelnetOutputStream.java 的摘录中,您可以看到这个任务与听起来一样简单:

    ...
    private OutputStream output;
    private final static byte[] ESCAPED = 
        { (byte) 255, (byte) 255 };
    
    public TelnetOutputStream( OutputStream inOutput )
    {
        output = inOutput;
    }
    
    public void write( int b ) throws IOException
    {
        if ( b == 255 )
        {
            output.write( ESCAPED );
        }
        else
        {
            output.write( b );
        }
    }
    ...

我们分配了一个包含两个字节的静态最终字节数组,目的都是为了避免一次发送一个字节而引起的任何开销,以及避免按需分配数组可能导致的任何开销。对于 MIDP 开发(相对应于 Swing 开发)来说有趣的是,这些细节可能实际上很重要。

Telnet 连接

因为 TelnetOutputStream 需要一个 OutputStream,且 TelnetInputStream 同时需要一个 InputStream  和一个与 TelnetOutputStream 分离的 OutputStream,所以在设置 telnet 会话时要注意很多东西。因为 MIDP 程序员习惯于使用 GCF,我们可以为面向对象的目的而将我们的类包装到更加用户友好的软件包中,从而隐藏了复杂性并与熟悉的使用模式保持一致。TelnetConnection.java 向您展示了如何做。您所需做的就是将您的 StreamConnection 传递到构造器,所以建立一个 telnet 会话就像这样:

    ...
    StreamConnection connection;

    connection = (StreamConnection)
        Connector.open("socket://wunderground.com:3000" ),
                       Connector.READ_WRITE, true );
    connection = new TelnetConnection( connection );

    InputStream input = connection.openInputStream();
    OutputStream output = connection.openOutputStream();
    ...


上一页 [1] [2] [3] [4] [5] [6] [7] 下一页 




上一篇:MIDP终端模拟之二:高级终端模拟

下一篇:J2EE入门教程之四

相关文章:
·我和一个偷尝禁果的女孩的故事
·李彦宏:三分之一时间用在寻找人才
·模拟城市4秘籍
·Windows Vista Ultimate中文旗舰版下载+简单破解(支持迅雷HTTP & BT)
·人生哲理:一个人最重要的是他的内心
·DVD转换MPEG-4三部曲之一
·Photoshop十余种漂亮照片边框简单制作技巧
·如何建立一个网站?规划、设计、目的、原则、宣传
·简单方法查找黑客老巢
·IE新开窗口最大化最简单有效方法
相关软件:
·模拟城市3000(Sim City 3000)简体中文版
·NDS《逆转裁判4 完美汉化简体中文版》模拟器
·一个真实的宋美龄
·整形模拟软件_非常face V1.0
·一个人的ktv
·《铁拳5》模拟器
·模拟人生 2
·《拳皇97》加强版 风云再起 模拟器
·功能较强的一个FLASH编辑器
·枪战类街机《高级战争2金手指》模拟器

特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
[打印本页] [关闭窗口] 转载请注明来源:http://www.vipcn.net
| 帮助(?) | 版权声明 | 友情连接 | 关于我们 | 信息发布
Copyright 2007 www.vipcn.net All Rights Reserved. 鄂ICP备05000083号Powered by:viphot