socket模块
简介
网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。socket通常被叫做“套接字”,用于描述IP地址和端口,是一个通信链的句柄,可以用来实现不同虚拟机或不同计算机之间的通信。在Internet上的主机一般运行了多个服务软件,同时提供几种服务。每种服务都打开一个Socket,并绑定到一个端口上,不同的端口对应于不同的服务。python中socket模块为操作系统的socket实现提供了一个python接口。
s=socket.socket(family,type)的实例方法
(1)s.bind((address,port))
将socket绑定到一个地址和端口上,通常用于socket服务端
address必须是一个双元素元组,((host,port)),主机名或者IP地址+端口号。如果端口号正在被使用或者主机名或IP地址错误,则引发socket.error异常。
端口号的使用是有限制的,在linux或者unix之中只有系统管理员才能使用1024以下的端口,这些端口号用于标准服务。
s.accept()
返回一个客户机socket,带有客户机端的地址信息。
调用accept方法的时候,socket会进入阻塞状态。客户请求连接时,方法建立连接并返回服务器。
accept方法返回一个双元素元组,形如(connection,address)。第一个元素是新的socket对象,第二个元素是客户的IP地址。
当一个连接close之后,可以接着调用accept继续接收从客户端发来的连接请求,因为listen让服务器一直处于监听的状态。
s.connect((address,port))
将socket连接到定义的主机和端口上,通常用于socket客户端
s.recv(buflen[,flags])
从socket中接收数据,最多接收buflen个字符,一般填写1024个
s.send(data[,flags])
通过socket发送指定的数据
s.send()发送数据的时候需要先建立socket连接,不然会出现error
使用recv方法和send方法发送和接受消息。发送和接收都是采用的字符串的形式。send方法返回已发送的字符个数。调用recv的时候,必须制定一个整数来控制本次调用所接受的最大的数据量。
recv方法接收数据时会进入阻塞状态,最后返回一个字符串,表示收到的数据。如果发送数据超过recv所允许,数据会被截断。多余的数据将缓冲于接收端。以后调用recv时,多余的数据会从缓冲区删除。
send与recv对应,不要出现两边都是相同的情况
s.close()
关闭socket连接
传输结束,通过调用close方法关闭连接
struct模块
1.按照指定格式将Python数据转换为字符串,该字符串为字节流,如网络传输时,
不能传输int,此时先将int转化为字节流,然后再发送;
2.按照指定格式将字节流转换为Python指定的数据类型;
3.处理二进制数据,如果用struct来处理文件的话,需要用’wb’,’rb’以二
进制(字节流)写,读的方式来处理文件;
4.处理c语言中的结构体;
当打包或者解包的时,需要按照特定的方式来打包或者解包.该方式就是格式化字符串,
# 它指定了数据类型,除此之外,还有用于控制字节顺序、大小和对齐方式的特殊字符.
# 格式符
# 格式符 C语言类型 Python类型 Standard size
# x pad byte(填充字节) no value
# c char string of length 1 1
# b signed char integer 1
# B unsigned char integer 1
# ? _Bool bool 1
# h short integer 2
# H unsigned short integer 2
# i int integer 4
# I(大写的i) unsigned int integer 4
# l(小写的L) long integer 4
# L unsigned long long 4
# q long long long 8
# Q unsigned long long long 8
# f float float 4
# d double float 8
# s char[] string
# p char[] string
# P void * long
# 注- -!
# _Bool在C99中定义,如果没有这个类型,则将这个类型视为char,一个字节;
# q和Q只适用于64位机器;
# 每个格式前可以有一个数字,表示这个类型的个数,如s格式表示一定长度的字符串,4s表示长度为4的字符串;4i表示四个int;
# P用来转换一个指针,其长度和计算机相关;
# f和d的长度和计算机相关;
#对齐方式
# Character Byte order Size Alignment
# @(默认) 本机 本机 本机,凑够4字节
# = 本机 标准 none,按原字节数
# < 小端 标准 none,按原字节数
# > 大端 标准 none,按原字节数
# ! network(大端) 标准 none,按原字节数