第一个基于XServer的程序

看了fcitx源码很长时间,里面的结构也大概明白了,但是按键消息怎么给输入法的总是不明白,前几天看到一个Linux下输入法的说明文章,才一下子解开了这个迷,原来有一个XIM(X Input Method),在Linux下弄输入法,就是对这个库编程。网址在这里:

http://www.ibm.com/developerworks/cn/linux/i18n/xim/xim-2/index.html

 

有了这个文章的帮助,很容易就把fcitx的整体结构看清楚了。主要用的是xlib的库,每一个输入法的相关函数封装到了一个结构中,这个结构包括了有关输入法的所有操作函数,然后在切换输入法的时候,把这个结构换一下就可以。所有的输入法结构的初始化在SetIM函数中,可以清楚的看到,用RegisterNewIM函数来注册,在这个函数里,就可以看到,把每个输入法相关的函数都放到了IM结构中,IM的定义如下

 

在程序中,定义了一个IM *im变量,用来保存现在的输入法。在SetIM中会给这个im分配内存,    im = (IM *) malloc (sizeof (IM) * iIMCount);

这样,处理完成后,就等待客户端程序的事件了。原来这这么一个过程

现在fcitx的结构要比以前的结构清楚多了。

 

程序结构清楚了,下一步就是学习了。首先从最简单的做起,一个XServer的客户端,显示一个小窗口,因为要给用户一个界面来看到现在的输入法状态。

代码如下

 

编译此代码:gcc -lX11 -o firstxlib firstxlib.o

 最后附一个Xlib Manual的网址:http://tronche.com/gui/x/xlib/

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,这是一个比较复杂的问题,需要进行详细的解答。首先,我们需要明确一些概念和术语: 1. 客户端(Client):请求服务的一方。 2. 服务器(Server):提供服务的一方。 3. 加密传输:在传输数据的过程中对数据进行加密,使得数据在传输过程中不易被窃取或篡改。 4. 消息认证:在传输数据的过程中对数据进行校验,确保数据的完整性和真实性。 5. 身份认证:在通信双方之间进行身份验证,确保通信双方的身份合法。 基于以上概念和术语,我们可以开始进行程序的设计和实现。 1. 构建基于Netty的Client-Server程序: Netty是一个高性能、异步的网络通信框架,支持多种协议(TCP、UDP、HTTP等),适合构建高可靠性、高并发的网络应用程序。在本实践中,我们可以使用Netty构建一个基于TCP协议的Client-Server程序,实现客户端与服务器之间的通信。具体实现方式可参考Netty官方文档(https://netty.io/wiki/user-guide-for-4.x.html)。 2. 实现“加密传输”、“消息认证”、“身份认证”: 在Netty框架中,可以使用ChannelPipeline实现对通信数据的处理和转换。因此,我们可以在ChannelPipeline中添加一些Handler,实现对数据的加密、认证等操作。具体实现方式如下: (1)加密传输:可选择一种对称/非对称加解密算法,如AES、RSA等。在数据发送之前,对待发送的数据进行加密;在数据接收之后,对接收到的数据进行解密。在ChannelPipeline中添加加密/解密Handler即可实现。 (2)消息认证:可选择一种Hash算法,如MD5、SHA等。在数据发送之前,对待发送的数据进行Hash计算,并将Hash值附加到数据中;在数据接收之后,对接收到的数据进行Hash计算,并与接收到的Hash值进行比较。如果Hash值不匹配,则说明数据已被篡改。在ChannelPipeline中添加Hash计算Handler即可实现。 (3)身份认证:可选择数字签名进行身份验证。在通信双方之间进行数字证书的交换,确保通信双方的身份合法。在ChannelPipeline中添加数字签名Handler即可实现。 3. Java实现: Java中有许多现成的加解密算法、Hash算法和数字签名算法可供选择。在实现过程中,可以使用Java标准库或第三方库来实现加解密、Hash计算和数字签名等操作。同时,在Netty框架中也提供了一些现成的Handler,如SslHandler、MessageDigestHandler、SignatureHandler等,可以方便地实现加密、Hash计算和数字签名等操作。 以上是一个大致的实现流程,具体的实现细节还需要根据实际需求进行调整和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值