python核心编程(十三&十四)— 网络编程、网络客户端编程

网络编程

套接字地址:主机与端口

合法的端口号范围为 0 到 65535。其中,小于 1024 的端口号为系统保留端口。

面向连接与无连接
  • 面向连接 TCP/IP

    实现这种连接的主要协议就是传输控制协议(即 TCP)。要创建 TCP 套接字就得在创建的时候, 指定套接字类型为 SOCK_STREAM。TCP 套接字采用 SOCK_STREAM 这个名字,表达了它做为流套接字的 特点

  • 和UDP

    实现这种连接的主要协议就是用户数据报协议(即 UDP)。要创建 UDP 套接字就得在创建的时候, 指定套接字类型为 SOCK_DGRAM。

Python 中的网络编程

socket()模块函数

语法:

socket(socket_family, socket_type, protocol=0)

socket_family 可以是 AF_UNIXAF_INETsocket_type 可以是 SOCK_STREAMSOCK_DGRAM

套接字对象(内建)方法

服务器端套接字函数

函数描述
s.bind()绑定地址(主机,端口号对)到套接字
s.listen()开始TCP监听
s.accept()被动接受 TCP 客户的连接,(阻塞式)等待连接的到来

客户端套接字函数

函数描述
s.connect()主动初始化 TCP 服务器连接
s.connect_ex()connect()函数的扩展版本,出错时返回出错码,而不是抛异常

公共用途的套接字函数

函数描述
s.recv()接受TCP数据
s.send()发送TCP数据
s.sendall()完整发送TCP数据
s.recvfrom()接受UDP数据
s.sendto()发送UDP数据
s.getpeername()连接到当前套接字的远端的地址
s.getsockname()当前套接字的地址
s.getsockopt()返回指定套接字的参数
s.setsockopt()设置指定套接字的参数
s.close()关闭套接字

Blocking-Oriented Socket Methods

函数描述
s.setblocking()设置套接字的阻塞与非阻塞模式
s.settimeout()设置阻塞套接字操作的超时时间
s.gettimeout()得到阻塞套接字操作的超时时间

面向文件的套接字的函数

函数描述
s.fileno()套接字的文件描述符
s.makefile()创建一个与该套接字关连的文件
创建一个 UDP 服务器和客户端

服务器端代码:

# coding=utf-8
from socket import *
import traceback

host = ''
port = 12345
s = socket(AF_INET, SOCK_STREAM)
s.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
s.bind((host, port))
s.listen(1)

while 1:
    try:
        clientsock, clientaddr = s.accept()
    except KeyboardInterrupt:
        raise
    except:
        traceback.print_exc()
        continue
    try:
        print "连接来自:", clientsock.getpeername()
        while 1:
            data = clientsock.recv(4096)
            if not len(data):
                break
            print clientsock.getpeername()[0] + ':' + str(data)
            clientsock.sendall(data)
            clientsock.sendall("\nI get it!\n")
            t = raw_input('input the word:')
            clientsock.sendall(t)
    except (KeyboardInterrupt, SystemExit):
        raise
    except:
        traceback.print_exc()

    try:
        clientsock.close()
    except KeyboardInterrupt:
        raise
    except:
        traceback.print_exc()

客户端代码:

# coding=utf-8
import socket, sys

port = 12345
host = raw_input('输入服务器ip:')
data = raw_input('输入要发送的信息:')
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
    s.connect((host, port))
except:
    print '连接错误!'
s.send(data)
s.shutdown(1)
print '发送完成。'
while 1:
    buf = s.recv(4096)
    if not len(buf):
        break
    sys.stdout.write(buf)
套接字模块属性

数据属性

属性名字描述
AF_UNIX, AF_INET, AF_INET6Python 支持的套接字家族
SO_STREAM, SO_DGRAM套接字类型 (TCP = 流, UDP = 数据报)
has_ipv6表示是否支持 IPv6 的标志变量

异常

属性名字描述
error套接字相关错误
herror主机和地址相关的错误
gaierror地址相关的错误
timeout超时

函数

属性名字描述
socket()用指定的地址家族,套接字类型和协议类型(可选)创建一个套接字对象
socketpair()用指定的地址家族,套接字类型和协议类型(可选)创建一对套接字对象
fromfd()用一个已经打开的文件描述符创建一个套接字对象

数据属性

属性名字描述
ssl()在套接字初始化一个安全套接字层(SSL)。不做证书验证。
getaddrinfo()得到地址信息
getfqdn()返回完整的域的名字
gethostname()得到当前主机名
gethostbyname()由主机名得到对应的 ip 地址
gethostbyname_ex()gethostbyname()的扩展版本,返回主机名,主机所有的别名和IP地址列表。
gethostbyaddr()由 IP 地址得到 DNS 信息,返回一个类似gethostbyname_ex()的3元组。
getprotobyname()由协议名(如’tcp’)得到对应的号码。
getservbyname()/getservbyport()由服务名得到对应的端口号或相反,两个函数中,协议名都是可选的。
ntohl()/ntohs()把一个整数由网络字节序转为主机字节序
htonl()/htons()把一个整数由主机字节序转为网络字节序
inet_aton()/inet_ntoa()把 IP 地址转为 32 位整型,以及反向函数。(仅对 IPv4 地址有效)
inet_pton()/inet_ntop()把 IP 地址转为二进制格式以及反向函数。(仅对 IPv4 地址有效)
getdefaulttimeout()/setdefaulttimeout()得到/设置默认的套接字超时时间,单位秒(浮点数)

网络客户端编程

ftplib.FTP 类方法
函数操作
login(user='anonymous', passwd='', acct='')登录到 FTP 服务器,所有的参数都是可选的
pwd()得到当前工作目录
cwd(path)把当前工作目录设置为 path
dir([path[,...[,cb]])显示 path 目录里的内容,可选的参数 cb 是一个回调函数,它 会被传给 retrlines()方法
nlst([path[,...])与 dir()类似,但返回一个文件名的列表,而不是显示这些文 件名
retrlines(cmd [, cb])给定 FTP 命令(如“RETR filename”),用于下载文本文件。 可选的回调函数 cb 用于处理文件的每一行
retrbinary(cmd, cb[,bs=8192[, ra]])与 retrlines()类似,只是这个指令处理二进制文件。回调函 数 cb 用于处理每一块(块大小默认为 8K)下载的数据。
storlines(cmd, f)给定 FTP 命令(如“STOR filename”),以上传文本文件。要 给定一个文件对象 f
storbinary(cmd, f[,bs=8192])与 storlines()类似,只是这个指令处理二进制文件。要给定 一个文件对象 f,上传块大小 bs 默认为 8Kbs=8192])
rename(old, new)把远程文件 old 改名为 new
delete(path)删除位于 path 的远程文件
mkd(directory)创建远程目录
rmd(directory)删除远程目录
quit()关闭连接并退出

参考资料:
Python核心编程
备注:
转载请注明出处:http://blog.csdn.net/wsyw126/article/details/54612912
作者:WSYW126

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值