python网络编程库_python网络编程【二】(使用TCP)

1.建立socket

对于一个客户端程序来说,建立一个socket需要两个步骤。首先,您需要建立一个实际的socket对象。其次,您需要把它连接到远程服务器上。

在建立socket对象的时候,您需要告诉系统两件事:通信类型和协议家族。通信类型指明用什么协议来传输数据。协议的例子包括IPv4(当前的Internet标准),IPv6(将来的Internet标准),IPX/SPX(NetWare)和AFP(Apple文件共享)。到目前为止最通用的是IPv4。

协议家族则定义数据如何被传输,通信类型基本上都是:AF_INET(和IPv4对应)。协议家族表示TCP通信的SOCK_STREAM和表示UDP通信的SOCK_DGRAM。

对于TCP通信,建立一个socket连接,一般类似这样的代码:

1 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

连接socket,您一般需要提供一个tuple(元组),它包含远程主机或ip地址和端口号。代码如下:

1 s.connect(("www.baidu.com", 80))

2.寻找端口号

大多数才做系统都会附带一份端口号列表,Python的socket库包含一个getservbyname()的函数,它可以自动地查询。

为了查询这个列表,您需要两个参数:协议名和端口号名。端口名是一个字符串,例如:http可以被转换为一个端口号。

1 #!/usr/bin/env python

2 importsocket3

4 print "Creating socket....."

5 s =socket.socket(socket.AF_INET,socket.SOCK_STREAM)6 print "done."

7

8 print "Looking up port number..."

9 port = socket.getservbyname('http','tcp')10 print "done."

11

12 print "Connecting to remote host on port %d..." %port13 s.connect(("www.baidu.com",port))14 print "done."

运行结果:

715780-20160630103129077-974488419.png

3.从socket获取信息

一旦建立了一个socket连接,您可以从他那里获取一些有用的信息:

1 #!/usr/bin/env python

2 importsocket3

4 print "Creating socket....."

5 s =socket.socket(socket.AF_INET,socket.SOCK_STREAM)6 print "done."

7

8 print "Looking up port number..."

9 port = socket.getservbyname('http','tcp')10 print "done."

11

12 print "Connecting to remote host on port %d..." %port13 s.connect(("www.baidu.com",port))14 print "done."

15

16 print "Connected from", s.getsockname()17 print "Connected to", s.getpeername()

运行结果:

715780-20160630104249187-848117848.png

运行这个程序可以看到两条新的信息。第一条显示您本身的IP地址和端口号,第二条显示远程机器的 IP地址和端口号。对于客户端来说,端口号是由操作系统分配的,所以,您会发现每次运行程序时,端口号都不一样。

4.利用socket通信

python提供了两种方法:socket对象和文件类对象

socket对象提供了操作系统的send(),sendto(),recv()和recvfrom()调用的接口。文件类对象提供了read(),write()和readline()这些更典型的python接口

5.socket异常

1.与一般I/O和通信问题有关的socket.error

2.与查询地址信息有关的socket.gaierror

3.与其他地址错误有关的socket.herror

4.与在一个socket上调用settimeout()后,处理超时有关的socket.timeout(需要python2.3或更高版本)

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值