python版本为3.5.X
socket--Low-level networking interface
This module provides access to the BSD socket interface.
1.创建socket实例:
import socket
sk = socket.socket()
对象sk常用的方法如下:
sk.bind(address) :将套接字绑定到地址,地址的格式取决于地址族,在AF_INET下,以元组形式表示('ip_address',port) 如:('192.168.1.254',8888)。[服务端使用]
sk.listen(backlog) :开始监听传入的连接,backlog指定队列中最大连接数,超过则拒绝连接。[服务端使用]
sk.setblocking(pool):是否阻塞,默认为True ,如果设为False,那么accept和recv时一旦无数据时,则报错。
sk.accept() :接受连接并返回(conn,addr),基中conn为套接字对象,可以用来发送和接收数据如:conn.recv(1024),conn.sendall(string) ,
addr为客户端的地址 [服务端使用]
sk.connect(address):连接到address处的套接字,address一般为元组。
sk.close(): 关闭套接字
sk.recv(1024):最大接收1024字节的数据,接收数据为二进制。
sk.send(data)
sk.sendall(data):发送的数据为二进制; sendall方法是不停的调用send方法,直到数据发送完为止。
sk.settimeout(timeout): 设置套接字操作的超时期,timeout为一个浮点数,单位是秒,如果为None则没有超时期。一般超时期应该在刚创建套接字时设置,用于连接操作(如client连接最多等待几秒)。
sk.getpeername():返回连接套接字的远程地址,通常为元组(ipaddr,port)。
sk.getsockname():返回套接字自己的地址,通常为一个元组(ipaddr,port)。
2. 示例一个简单的ftp:
服务端:
1 import socket
2 ip_addr = ('192.168.1.254',8888)
3 sk = socket.socket()
4 sk.bind(ip_addr)
5 sk.listen(5)
6
7 #循环处理连接
8 while True:
9 conn,addr = sk.accept()
10 data = conn.recv(1024) #设定一次接收1024字节,数据为二进制
11 print(str(data,encoding='utf8')) #将二进制数据转化为字符串并打印
12 conn.sendall(bytes('hello',encoding='utf8')) #发送数据到客户端
客户端:
1 import socket
2 ip_addr = ('192.168.1.254',8888)
3 sk = socket.socket() #创建socket套接字对象
4 sk.connect(ip_addr) #连接服务端
5
6 while True:
7 sk.sendall(bytes('hello world',encoding='utf8'))
8 data = sk.recv(1024)
9 print(str(data,encoding='utf8'))
10 sk.close()