转到正文

存档

标签: Linux

在Linux环境下,默认情况下的python2.3的encode功能不能使用(不能encode gbk2312, utf8)。我们在项目中使用Twisted框架来开发CS结构的程序,服务器端和客户端会用中文消息进行传递。twisted默认使用utf8进行编码【1】,一般情况下,只需要在服务器端用utf8进行编码,客户端则可以自动地将数据解析成功。

但是python2.3在Linux下却无法使用encode utf8功能。因此中文消息无法在CS之间传递。

为了能正确传递中文消息,最后采用的解决方法是:在服务器端用base64编码,然后在客户端用base64解码【2】。这种方法可以正确解决这个问题。

Reference:

1. http://twistedmatrix.com/pipermail/twisted-web/2007-October/003551.html
2. http://blog.csdn.net/lxdcyh/archive/2009/03/24/4021476.aspx

Twisted是一个非常流行的,完全事件驱动的网络框架。

目前我的项目中,急需要一种流行的、稳定的,C/S结构的Python网络编程框架。我的选择有很多:Socket, SocketServer, Twisted, RPyC, XMLRPC…… 。

Socket是非常古老底层的框架,用它来编程有让人回到远古时代的感觉。SocketServer是比较成熟的模块了,但是它不支持RPC远程调用,且也比较古老了。XMLRPC与SocketServer差不多。RPyC看起来挺新的,但是开发者、文档都很少,稳定性不佳。Twisted是一个成熟、开发者众多、文档丰富的强大的网络框架,因此,我将它作为项目的C/S框架。

Twisted最新版本是11.0,它支持Python2.4-2.7. Twisted支持Python2.3的最近版本是9.0【1】. 下面将描述在Linux下安装Twisted9.0+Python2.3 与 在Windows下安装Twisted11.0+Python2.7的方法。

开源的项目在Windows平台下支持都不是很好。对于Python2.3来说,Twisted是没有已经编译好的.exe版本来支持它的(对于Python2.4-2.7,Twisted都有良好的支持的.exe版本)。因此,为了在Windows的Python2.3下使用Twisted来说,只能自己编译源码。然而,编译源码是非常困难的。我建议还是作罢,不要有这种想法。因此,在Windows下,我们是不能用Python2.3来进行Twisted编程的。也正是这个原因,我在Windows下的开发环境是:Python2.7+Twisted11.0。安装Twisted11.0之后,很有可能,你在导入from twisted.internet import protocol, reactor时会报错:

ImportError: No module named zope.interface

解决办法可参考【2】,下载zope.interface 3.6.2即可解决。

继续阅读

在《UNIX高级环境编程》(第二版)第241页中,有关于signal 与 SIG_ERR的定义:

void (*signal   (int signo, void (*func)(int))  )(int);
#define SIG_ERR (void (*)()) -1

在程序清单10-1中,有这么一行代码:

if(signal(SIGUSER1, sig_usr) == SIG_ERR)

看到上面三行代码后,看书认真的同学肯定有疑问,SIG_ERR的定义不对啊,SIG_ERR应该要有参数才对,SIG_ERR的定义应该:

#define SIG_ERR (void (*)(int)) -1

才对啊!

为此,我分别在VS2010与VIM环境下简单的写了几行代码来验证SIG_ERR是否有误。结果发现:

  • VS2011要求SIG_ERR的定义中,函数必须要有参数,否则编译不让通过
  • VIM则认为书上SIG_ERR定义是正确的,编译运行通过,即便函数声明不严谨(没有参数)。文献[1]给出了一个解释:“老版本的c无参表示可以有任意参数”。我想这个解释是正确的。

继续阅读

Linux Errors:

Under Linux environment, some errors have been found:

term.h: No such file or directory and curses.h: No such file or directory

Solution:

we need ncurses lib. type command in your Linux( Suppose Linux is Ubuntu ):[1]

sudo apt-get install libncurses5-dev

After the above command is run correctly, then you can compile and link your c(cpp) source code(for example, a.c) by using ncurses Lib:

gcc -o a.out a.c -lncurses

继续阅读

www.liaoqiqi.com网站PR查询 博客简洁版 博客Google_Site_Map 博客Baidu_Site_Map ?