分类: 系统运维
2012-11-06 11:41:55
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()——关闭socketsock.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和UDPAF_INET6:这个套接字是基于网络的,对于IPV6协议的TCP和UDP
type参数指的是套接字类型:
2.将socket绑定到指定的地址上:SOCK_STREAM:流套接字,使用TCP socketSOCK_DGRAM:数据包问套接字,使用UDP socketSOCK_RAW:raw套接字
点击(此处)折叠或打开
- 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方法连接服务器:3.通过recv方法和send方法通信,如服务器部分。点击(此处)折叠或打开
- socket.connect((host,port))
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()