您的位置:首页 > 编程语言 > Python开发

python socket 模块

2015-09-22 16:18 645 查看
套接字是为特定网络协议(例如TCP/IP,ICMP/IP,UDP/IP等)套件对上的网络应用程序提供者提供当前可移植标准的对象。他们允许程序接受并进行链接,发送和接收数据。

不管是使用python、perl、ruby、C、还是其他的一些语言来编写socket程序,socket通常都是相同的。这是两个应用程序彼此进行通信的管道。

而python作为一种解释性语言,非常的容易使用,并且能够快速开发我们所需要的软件。而且python拥有着大量的库供我们调用。目前业界到处都可以看到python的踪影,它被用来构建系统工具,用作程序集成的黏合剂,更多的被用来开发Internet应用程序和快速开发原型。

python提供了两个基本的socket模块。一个是socket,它提供了标准的BSD socket API。第二个是SocketeSever,它提供了服务器中心类,可以简化网络服务器的开发。这篇文章用来总结和归纳socket模块。

一、socket模块的类方法:

socket.socket(family,type)——创建并返回一个新的socket对象

socket.getfqdn(name)——将使用点好分割的IP地址字符串转换成一个完整的域名

socket.gethostbyname(name)——将主机名解析为一个使用点号分隔的IP地址字符串

socket.fromfd(fd,family,type)——从现有文件描述符创建一个socket对象

二、socket模块的实例方法:

sock.bind((adrs,port))——将socket绑定到一个地址和端口上
sock.accept()——返回一个客户机socket(带有客户机端的地址信息)
sock.listen(backlog)——将socket设置成监听模式,可以监听backlog外来的链接请求
sock.connect((adrs,port))——将socket连接到定义的主机和端口上
sock.recv(buflen[,flags])——从socket中接受数据,最多buflen个字符
sock.send(data[,flags])——通过socket发送数据
sock.close()——关闭socket
sock.getsockopt(lvl,optname)——获得指定socket选项的值
sock.setsockopt(lvl,optname)——设定制定socket选项的值

三、建立一个简单的服务器的步骤:

1.调用socket构造函数,创建socket对象:

点击(此处)折叠或打开

socket=socket.socket(family,type)

family参数指的是host的种类:

AF_UNIX:也叫AF_LOCAL,基于本地文件的

AF_NETLINK:这是linux系统支持的一种套接字

AF_INET:这个套接字是基于网络的,对于IPV4协议的TCP和UDP

AF_INET6:这个套接字是基于网络的,对于IPV6协议的TCP和UDP

type参数指的是套接字类型:

SOCK_STREAM:流套接字,使用TCP socket

SOCK_DGRAM:数据包问套接字,使用UDP socket

SOCK_RAW:raw套接字

2.将socket绑定到指定的地址上:

点击(此处)折叠或打开

socket.bind(address)

address必须是一个双元素元组,((host,port)),主机名或者IP地址+端口号。如果端口号正在被使用或者主机名或IP地址错误,则引发socket.error异常。

端口号的使用是有限制的,在linux或者unix之中只有系统管理员才能使用1024以下的端口,这些端口号用于标准服务。

3.让服务器开始监听客户端发来的连接消息:

点击(此处)折叠或打开

socket.listen(backlog)

这个方法设置服务器为监听状态,backlog制定了最多的连接数,至少为1.接到连接请求后,这些请求必须排队,如果队列达到backlog的数值,则拒绝接下来的连接请求。

4.通过accept方法等待客户请求的第一个连接:

点击(此处)折叠或打开

connection,address=socket.accept()

调用accept方法的时候,socket会进入阻塞状态。客户请求连接时,方法建立连接并返回服务器。
accept方法返回一个双元素元组,形如(connection,address)。第一个元素是新的socket对象,第二个元素是客户的IP地址。

当一个连接close之后,可以接着调用accept继续接收从客户端发来的连接请求,因为listen让服务器一直处于监听的状态。

5.信息传递和处理阶段:

点击(此处)折叠或打开

data=socket.recv(512)

点击(此处)折叠或打开

socket.send('hello , it is
my message')

使用recv方法和send方法发送和接受消息。发送和接收都是采用的字符串的形式。send方法返回已发送的字符个数。调用recv的时候,必须制定一个整数来控制本次调用所接受的最大的数据量。
recv方法接收数据时会进入阻塞状态,最后返回一个字符串,表示收到的数据。如果发送数据超过recv所允许,数据会被截断。多余的数据将缓冲于接收端。以后调用recv时,多余的数据会从缓冲区删除。

6.传输结束,调用close方法来关闭连接。

点击(此处)折叠或打开

socket.close()

四、建立一个简单的客户端的步骤:

1.创建一个socket对象以连接服务器。

2.使用socket的connect方法连接服务器:

点击(此处)折叠或打开

socket.connect((host,port))

3.通过recv方法和send方法通信,如服务器部分。
4.传输结束,通过调用close方法关闭连接。

五、一个简单的服务端的例子:

点击(此处)折叠或打开

import socket

s=socket.socket()

s.bind(('127.0.0.1',10000))

s.listen(5)

while True:

    cs,address=s.accept() #让服务器可以在close之后接收其他客户端的连接请求

    print('got connected
from'+address)

    cs.send('I have got your
socket')

    data = cs.recv(512)

    print ra

     

    cs.close

六、一个简单的客户端的例子:

点击(此处)折叠或打开

import socket

s=socket.socket()

s.connect('127.0.0.1',10000)

data=s.recv(512)

s.send('this is a connection
from client')

print('The data received
is '+data)

s.close()
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: