python 网络编程基础实例

发布时间:2020-02-07编辑:脚本学堂
python 网络编程基础学习

     python实在是太方便,太易用了,三方库的支持又全,语法又简单,对开发人员来说,实在是居家旅行,XXXX的必备利器。
    周末研究了下python的网络支持,做一下记录,以备随后翻阅。

    python支持BSD的socket进行网络编程,其API跟C中的大同小异,先看看TCP方式的,说到网络编程,肯定会设计到server和client,下面分别来看下。

TCP方式

server端
server端的socket一般流程是这样:
    1.建立一个socket(可以选择socket类型INET,UNIX等,以及连接方式TCP/UDP)
    2.使用bind公开一个端口,使得client可以方便连接
    3.设置一个listen队列的大小
    4.进入一个无限循环,在此无限循环中,使用accept函数来等待客户连接,此函数返回一个新的socket, 对应于客户端的socket,建立通信信道。对socket的处理一般放5.在外部单独的函数中(并发)
    6.通过send()/recv()来对socket进行读写操作

下面看一下例子:
   

复制代码 代码如下:
def tcpServer(): 
        srvsock = socket.socket( socket.AF_INET, socket.SOCK_STREAM) 
        srvsock.bind(('', 9527)) 
        srvsock.listen(5) 
     
        while True: 
            clisock, (remoteHost, remotePort) = srvsock.accept() 
            print "[%s:%s] connected" % (remoteHost, remotePort) 
            #do something on the clisock 
            clisock.close() 
      
    if __name__ == "__main__": 
        tcpServer() 

client端
    建立一个新的socket
    使用connect函数与远程主机获得连接
    在此socket上进行I/O操作
   

复制代码 代码如下:
def tcpClient(): 
        clisock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
        clisock.connect(('localhost', 9527)) 
         
        #I/O on this clisock 
        #clisock.send("") 
        #dat = clisock.recv(len) 
         
        print dat 
         
    if __name__ == "__main__": 
        tcpClient() 

 由代码量可见python之简单,想要将这个例子改造成一个文件传输器,估计只需要增加不到20行代码即可。

UDP方式

UDP号称无连接传输,全然没有TCP那么复杂,三次握手,错误重传之类的机制都没有,发的只管发,收得只管收,收到没有?不知道,顺序不对怎么办?不管!就是这样,但是速度就要比TCP高得多了。在对数据帧要求不是很高的地方,这确实是很好用的,比如网络上的视频传输,音频传输等。

server端
    建立数据报形式的socket
    公开一个端口,一边客户端连接
    开始接收数据
   

复制代码 代码如下:
def udpServer(): 
        address = ('', 9527) 
        srvsock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) 
        srvsock.bind(address) 
        #data,addr = srvsock.recvfrom(2048) 
     
    if __name__ == "__main__": 
        udpServer() 

 需要注意的是,server中address元组中的引号表示可以接受任何地址来的数据报,TCP例子中的则表示可以接受任意地址发起的连接。

client端
    新建一个数据报socket
    收发数据
   

复制代码 代码如下:
def udpClient(): 
        address = ('localhost', 9527) 
        clisock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) 
        #clisock.sendto(data, address) 
         
    if __name__ == "__main__": 
        udpClient() 

    文中给出的例子已经具有网络程序的基本结构,在实际应用中,应该自行扩展对socket的处理,socket说到底跟文件句柄,文件描述符,管道描述符等都是一个概念,可以对其进行I/O处理,事实上,在UNIX类系统中,对socket的操作跟对文件句柄的操作没有任何形式上的差异。

您可能感兴趣的文章:
python编程实例之os模块读取目录与文件信息
python编程实例之MySQLdb读取数据库中的数据
python编程实例之更新数据库
python编程实例之插入数据
python 读取文本文件内容转化为list的实例代码
Python处理MD5的实例分享
python实例之复制目录下的文件
python实例:一个ftp到ftp传输程序
python实例:使用一个对象实例作为一个FTP回调
分享:python发邮件的综合实例
python邮件发送模块smtplib的实例详解
Python实例:获取当前目录下所有文件夹大小
python实例:列出指定目录下的文件与子目录
python目录操作实例:列出目录下的文件夹和文件
python监控文件或目录的变化(实例代码)
Python创建目录的实例代码
实例详解python正则表达式的用法
python读写windows注册表的实例代码
python多线程Ping网段的实例代码
python gzip压缩文件的实例代码
python导出linux用户权限的实例代码
python获取汉字拼音的首字母的实例代码
python的tarfile模块实例 python把文件夹压缩成tar格式文件的例子
Python ConfigParser模块常用方法的实例详解
Python将Html转换为UBB的实例代码
python清除字符串中非数字字符(python正则实例)
python使用gmail发送邮件的实例代码
python实例之对MySqldb模块的简单封装代码
Python扫描IP段指定端口是否开放的实例代码
python监控单台多实例数据库服务器端口的实例代码
Python将数字转化为中文大写的实例代码
linux下制作BT种子与获取BT种子信息的实例教程
python实现监控mysql主从的APP实例代码
Python 字符串操作实例(替换、删除、截取、大小写转换、分割等)
python自动创建mysql从库脚本的实例代码
Python 备份文件的实例代码
Python 文件与目录操作实例详解
python实例:简单的网站目录扫描器
python 时间转换(day,hous,minute,second)实例代码
python 多进程使用Queue通信的实例代码
python csv模块读取与写入CSV文件的实例代码
python实例代码 为窗口添加菜单功能
python实例代码 简单的表格菜单的例子
python实例代码 一个表单中三个菜单的实现方法
python实例代码之实现文档接口菜单(打开文件\新建文件)
python实例代码之弹出三个窗口
python实例代码之菜单工具栏
python实例代码之菜单操作
python实例代码之菜单分离器
python实例代码之创建小菜单
python实例代码之禁用菜单
python实例代码之级联菜单
python实例代码之菜单的分割线
python实例代码之为文本菜单项添加下划线
python实例代码之禁用菜单项
python实例设置菜单并添加动作行为
python实例之鼠标放在菜单项主动改变前景颜色
python实例 python设置菜单项字体的例子
python实例代码 python设置颜色的例子
python实例代码 python中yes ok cancel对话框