存档六月, 2004

Platform Independent Widgets

这两天一直在尝试各种能够跨平台的Widget,为了以后编写程序的时候可以方便快捷。在现在常用的几个Widget库中,GTK和QT都是同时有多个平 台的版本的,但从成熟度上来说,QT要比GTK强,可QT的Windows版本是要钱的,同时网上只有2.x的版本下载,因此QT并非一个毫选择。另外就 是wxWidget,这个Widget就是为了跨平台运行而设计的,但是其稳定版本在Linux上用的是GTK1.x,效果比较差,对中文的支持也不好。

综合以上各种因素,在三个套件中,wxWidget和GTK都是不错的,如果主要为Windows平台设计,wxWidget是首选,但如果主要为Linux平台设计,GTK2是首选。

在 具体的编程语言方面,可选的是C、C++、Python等,C/C++的性能好,但编程需要的技巧也比较高。Python这个方面,今天我在 win4lin中实验的时候运行并不是很快,不知道在native的系统上是否速度能有比较大的提升。在linux上,Python是首选的编程语言,主 要是因为它编程的速度非常快。

综合以上多方面的因素,在选择Widget和编程语言时,如果主要为Linux开发,GTK2不错,语言可以用Python、C++和C,如果主要为Windows开发,wxWidget不错,编程语言首选是C++,其次是Python。

GTK2 的Win32 Port有很多个版本,各个版本之间恐怕兼容上也有些问题,现在我用起来感觉比较好的版本是Dropline的,但这个版本已经不再开发了。PyGTK可 以在Dropline的版本上运行,据说也支持glade和多线程。另外gladewin32的版本据说运行gtkmm比较。还有另外一个版本好像比较官 方,但安装起来挺麻烦的。如果要用,Dropline版本首选,但如果有精力还是想办法自己Build需要的东西并打包。

此外GTK2和KDE3在Win32上都有一个Cygwin的版本,它们还可以在cygwin的Xfree86中运行,因此有机会可以试试cygnome和cykde等。对于Windows用户而言,这是一个尝试Linux的方式。

留言

FTP ABOR

FTP的ABOR:

在FTP中,有一个ABOR命令,用来中断前面正在执行的命令。譬如在上传下载的过程中,可以在Control Connection上发送ABOR命令来中断上传或者下载。关于ABOR命令的正确用法,在RFC959中有详细描述:

1. 在Control Connection上发送Telnet的IP命令,
2. 在Control Connection上发送Telnet的Synch信号,
3. 在Control Connection上发送ABOR命令
4. 在Control Connection上接受ABOR命令的结果

IP 和Synch都是Telnet的控制信号,在Telnet中,发送控制信号前需要发送一个字符255,然后跟着控制信号的字符。IP的字符是244,因 此,在发送的时候就是 sendall(chr(255)+chr(244))。而Synch信号则是以TCP urgent的方式发送的DM命令,DM的字符是242,在socket编程中,通过MSG_OOB选项来提示TCP以urgent方式发送命令。因此, 发送DM的命令就是 sendall(chr(255)+chr(242), MSG_OOB)。

在Python的ftplib中,ABOR命令是直接以Urgent的方式发送字符串’ABOR’,这是错误的,按照上面的方式我进行了测试,可以在proftpd和serv-u等服务器的最新版本上工作。

另 外,由于通常get/put和ABOR是在不同的进程中进行,当ABOR发送出去之后,服务器会把get/put的response以及ABOR的 response先后返回。但如果get/put和ABOR同时去读取response就会有问题了。因此,最好让ABOR稍微等一下,或者把读取的任务 全部交给ABOR,这样才能避免错误。

在Python中还有一个select.poll对象,这个对象的功能类似于GTK中用来监视文件的事件,在编写网络程序的时候还是比较有用的。

留言