python——客户端socket的建立、获取信息、异常

建立socket的步骤:

1、建立实际的socket对象

     需要指明通信类型(指明用什么协议来传输数据)和协议家族(定义数据如何被传输)。

     协议包括IPv4(当前Internet标准)、IPv6(将来Internet标准)、IPX/SPX(NetWare)和AFP(Apple文件共享)。

     Internet通信的通信类型基本上都是AF_INET(和IPv4)对应。

     协议家族一般是SOCK_STREAM表示TCP通信,SOCK_DGRAM表示UDP通信。

     例:TCP通信,建立一个socket连接

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

2、将该对象连接到远程服务器

     使用connect函数并提供一个包含远程主机名或IP地址和远程端口的元组。

 

 

建立一个连接并马上终止:

#!/usr/bin/env python

#Basic Connection Example - Chapter 2 - connect.py


import socket


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


print "Connecting to remote host ..." 
s.connect(("www.baidu.com",80))                     //书上用的google,运行时无法建立连接

print "done."

socket有一个getservbyname()函数可以自动查询端口号,参数为协议名(如 http, smtp,等)和端口名(tcp,udp)。

该例子中如需要获取端口号应加上

                                                 port = socket.getservbyname('http','tcp')

便可得到port=80(用于浏览网络服务端口号为80)

getsockname()函数可以获取自身的IP地址和端口号(对于客户端来说,端口号是由操作系统分配的,可能是随机的,所以每次运

行端口号不一样),getpeername()函数可以显示远程机器的IP地址和端口号。

运行如下图所示(右侧为运行结果):

socket有四种可能的异常:

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

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

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

4、与在一个socket上调用settimeout()后,处理超时有关的socket.timeout

(connect()可能会有两种错误,主机名不对会产生socket.gaierror,连接远程主机有问题则是socket.error)

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页