1.什么是socket:
socket又称套接字,应用程序经常通过套接字向网络发出请求,使主机间或者一台计算机上的进程间可以通讯
2.socket函数:
python中,我们用socket()函数来创建套接字,语法格式如下:
socket([family[,type[,protocal]]])
Ⅰ.family:套接字家族里可以使用AF_UNIX或者AF_INET
Ⅱ.type:套接字类型,可以根据是面向对象连接还是非连接分为SOCK_STREAM或SOCK_DGRAM
Ⅲ.protocal:一般不填,默认为0
3.socket对象(内建)方法
①
s = socket.socket()
服务端套接字:
1>
s.bind( (host,port) )
bind()里面是一个元组:(host,port)
其中host是连接地址(IP地址或者域名),port是端口
作用是绑定地址 (host,port) 到套接字
2>
s.listen(backlog)
backlog是指定在拒绝连接之前,操作系统可以挂起的最大连接数量。该值至少为1,大部分应用程序设为5就可以了
3>
s.accept()
作用:被动接受TCP客户端的连接,(阻塞式)等待连接的到来
写法:
c,addr = s.accept()
c就是客户端对象(s是服务端对象),addr是客户端的地址
客户端套接字:
1>
s.connect( (host,port) )
connect()中是一个元组:(host,port)
其中host 是地址(IP地址或者域名),port是端口=
作用是连接服务端
如果连接出错,返回socket.error错误
2>
s.connect_ex( (host,port) )
connect()的扩展版本,出错时返回出错码,而不是抛出异常
公共用途的套接字:
1>
s.recv(bufsize)
bufsize是指定要接收的最大数据量
作用是接收TCP数据,数据以字符串形式返回
2>
s.send(str)
作用是发送TCP数据,
将string中的数据发送到连接的套接字。
返回值是要发送的字节数量,该数量可能小于string的字节大小
3>
s.sendall(str)
作用是发送完整的TCP数据。将string中的数据发送到连接的套接字。但在返回前会尝试发送所有的数据。
成功返回None,失败返回异常
4>
s.makefile()
作用是创建一个与该套接字相关联的文件
5>
s.close()
作用为关闭TCP连接
实例1:
服务端:
import socket #导入socket模块
s = socket.socket() #创建socket对象
host = socket.gethostname() #获取本机主机名
port = 10000 #设置端口号
s.bind((host,port)) #绑定端口
s.listen(5) #开始TCP监听,backlog=5
c,addr = s.accept() #建立客户端连接
print("连接地址为:",addr)
while True :
b = c.recv(2048) #接收数据,bufsize=2048
print(b)
c.send('Hello') #发送数据
c.close() #关闭客户端连接
客户端:
import socket
s = socket.socket()
host = socket.gethostname()
port = 10000
s.connect( (host,port) )
s.send('hello')
b = s.recv(2048)
print(b)
s.close()