文章标签 ‘python’

python 编写server的步骤:
第一步是创建socket对象。调用socket构造函数。如:
socket = socket.socket( family, type )
family参数代表地址家族,可为AF_INET或AF_UNIX。AF_INET家族包括Internet地址,AF_UNIX家族用于同一台机器上的进程间通信。
type参数代表套接字类型,可为SOCK_STREAM(流套接字)和SOCK_DGRAM(数据报套接字)。
第二步是将socket绑定到指定地址。这是通过socket对象的bind方法来实现的:
socket.bind( address )
由AF_INET所创建的套接字,address地址必须是一个双元素元组,格式是(host,port)。host代表主机,port代表端口号。如果端口号正在使用、主机名不正确或端口已被保留,bind方法将引发socket.error异常。
第三步是使用socket套接字的listen方法接收连接请求。
socket.listen( backlog )
backlog指定最多允许多少个客户连接到服务器。它的值至少为1。收到连接请求后,这些请求需要排队,如果队列满,就拒绝请求。
第四步是服务器套接字通过socket的accept方法等待客户请求一个连接。
connection, address = socket.accept()
调 用accept方法时,socket会时入“waiting”状态。客户请求连接时,方法建立连接并返回服务器。accept方法返回一个含有两个元素的 元组(connection,address)。第一个元素connection是新的socket对象,服务器必须通过它与客户通信;第二个元素 address是客户的Internet地址。
第五步是处理阶段,服务器和客户端通过send和recv方法通信(传输 数据)。服务器调用send,并采用字符串形式向客户发送信息。send方法返回已发送的字符个数。服务器使用recv方法从客户接收信息。调用recv 时,服务器必须指定一个整数,它对应于可通过本次方法调用来接收的最大数据量。recv方法在接收数据时会进入“blocked”状态,最后返回一个字符 串,用它表示收到的数据。如果发送的数据量超过了recv所允许的,数据会被截短。多余的数据将缓冲于接收端。以后调用recv时,多余的数据会从缓冲区 删除(以及自上次调用recv以来,客户可能发送的其它任何数据)。
传输结束,服务器调用socket的close方法关闭连接。
python编写client的步骤:
创建一个socket以连接服务器:socket = socket.socket( family, type )
使用socket的connect方法连接服务器。对于AF_INET家族,连接格式如下:
socket.connect( (host,port) )
host代表服务器主机名或IP,port代表服务器进程所绑定的端口号。如连接成功,客户就可通过套接字与服务器通信,如果连接失败,会引发socket.error异常。
处理阶段,客户和服务器将通过send方法和recv方法通信。
传输结束,客户通过调用socket的close方法关闭连接。
下面给个简单的例子:
server.py
python 代码
1234567891011121314151617if __name__ == ‘__main__’:  
    import socket  
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  
    sock.bind((’localhost’, 8001))  
    sock.listen(5) [...]

2010年1月9日12:41 | 没有评论
分类: 编程相关
标签: ,

前一篇文章写的在APACHE安装MOD_PYTHON的经过,其实挺简单,就是版本不兼容的问题.这次我大概说下部署DJANGO的过程.
先修改APACHE配置文件,使其加载mod_python模块
LoadModule python_module libexec/mod_python.so
运行命令查看
bin/httpd -M可以看到
 python_module (shared)
Syntax OK
说明apache已经成功加载mod_python.
下面我说下我的实际的环境和项目情况:
/infoware/xx/web是django程序目录
/infoware/_conf/xx/是控制django的程序还有一些配置(有些配置变量没有写在settings),这一步可以不需要,因为大多数人会直接配置settings文件的.我是在虚拟主机上操作.
–CENTOS5.2+APACHE2.2.11+PYTHON 2.4.3+MOD_PYTHON3.3.1+DJANGO 0.96
下面是apache配置文件
—————————————————-
<VirtualHost *:80>
        ServerAdmin webmaster@xxcom
        DocumentRoot “/infoware/xx/web”
        ServerName www1.xx.com
        ServerAlias www1.xx.com
        ErrorLog “/var/log/apache/xx/xx_error_log”
        CustomLog “/var/log/apache/xx/xx_access_log” common
        <Directory “/infoware/xx/web”>
            Options Indexes FollowSymLinks
            AllowOverride None
            Order allow,deny
            Allow from all
        </Directory>
        <Location “/”>
            SetHandler python-program
            PythonHandler django.core.handlers.modpython
            PythonPath “['/infoware/xx/web']+['/infoware/_conf/xx] + sys.path”
            SetEnv DJANGO_SETTINGS_MODULE settings
            SetEnv PYTHON_EGG_CACHE /tmp/cucrm//这儿是加个变量,会在下面说明
            PythonDebug On
        </Location>
</VirtualHost>
——————————————————————
以上配置一定要注意环境变量的配置,否则会出错!
我在配置前出现了以下错误,##################################################################
Can’t extract [...]

2009年4月1日10:20 | 没有评论
分类: 系统管理

安装mysqldb-python,环境是要DJANGO支持MYSQL数据库,得安装这个插件。下载了EGG文件,执行easy_install MYSQLDBxxxxx.egg提示错误:
##############################
/usr/bin/ld: cannot find -lmysqlclient_r
###############################
以为是库找不到,后来编辑/etc/ld.so.conf文件将MYSQL库和头文件加进去,ldconfig执行后还是一样,后为看了一下README,老发现需要配置SITE。CFG文件,将threadsafe选项设置成false,后正常。。
分享收藏

2009年1月13日23:18 | 没有评论
分类: 系统管理

今天在家里电脑准备安装django环境,当然肯定用mysql数据库了。PYTHON要操作MYSQL,必须得安装扩展名–mysql-python,(mysql-python-1.2.2).在安装期间提示标题所写(/usr/bin/ld: cannot find -lmysqlclient_r),
执行以下命令:
echo “/usr/local/mysql/lib/mysql” >> /etc/ld.so.conf(我的环境是centos 5)
ldconfig,执行以后还是提示以上错误。
分享收藏

2008年11月25日22:48 | 1 条评论
分类: 系统管理

#!/usr/bin/python
import sys
class queryreip(object):
def __init__(self,inmsg,outmsg):
self.inmsg = inmsg
self.outmsg = outmsg
self.process_request()
def process_request(self):
first_time = True
[...]

2008年10月23日10:41 | 没有评论
分类: 系统管理
标签: , ,
关闭
Powered by ShareThis