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,按原字节数

转载于:https://www.cnblogs.com/pangqian/p/11318777.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值