只要涉及网络服务,套接字和套接字编程就必不可少。 介绍python socket通信的基本原理。
1 .插座
套接字(也称为套接字)用于描述IP地址和端口,是通信链的句柄。 通常,APP应用程序通过“套接字”向网络发出请求或响应网络请求。 可以举出中国移动和中国电信等电话支持,当然也可以看下面的照片来说明形象。
套接字起源于Unix,但Unix/Linux的一个基本哲学是,它可以在所有文件中操作,即“打开—关闭读写write/read—的关闭”模式。 套接字是此模式的实现之一,套接字是一个特殊文件,一些套接字函数是其操作(读/写、开/关I/o )。
请看到以下图标并形象地进行说明。
2 .套接字编程
(1)套接字服务器的编程
主要包括以下步骤:
1 .打开插座
2 .绑定到地址和端口
3 .拦截传入的连接
4 .接受连接
5 .数据读写
)2)套接字客户端编程
主要包括以下步骤:
1 .打开插座
2 .连接地址和端口
3 .数据读写
3 .插座类型
套接字可以按类型分为以下几类: 插座类型适用范围的说明
socket.AF_Unix只能用于单个UNIX系统进程间通信,不能在不同主机之间通信
socket.AF_INET服务器之间的网络通信现在常用的就是这样
socket.AF_INET6IPv6很少使用,因为IPv6不流行
上面是插座的类型,细分后也有插座的数据包类型。 该图如下所示。
第一个和第二个,也就是for TCP和for UDP的类型很常用。 当然,socket.SOCK_RAW也需要注意。 因为可以构建IP头部,所以遵循这一思路,可以一起伪造不同源IP地址的数据包,对一些中小企业的服务器进行Dos攻击。
4 .套接字函数
对套接字执行“I/o读写、打开、关闭”等操作的函数就是套接字函数。 请参照下图。
只记住常用的东西就行了。 也就是说,通常是在服务器端和客户端端编程使用的。 请参考以下示例。
5 .插座示例
在这里,写一个单线程的非交互式套接字,在本地实现通信就好了。
服务器端:导入importsocket#套接字类
HOST=‘‘#”定义了监听本地地址的端口(对于多个IP地址),这里意味着监听所有端口,也可以写作0.0.0.0
port=50007#服务器端的开放服务端口
s=Socket.socket(socket.af_inet,socket.SOCK_STREAM ) #选择socket类型和socket数据包类型
s.bind () PORT,PORT ) #绑定IP地址和端口
s.listen(1) #定义拦截数并开始拦截(实际没有效果) ) )
conn,addr=s.accept(#定义实例,accept ) )函数的返回值可以看到上述套接字函数的说明
print‘Connectedby‘,addr
while1:
接受DTA=Conn.recv(1024 ) #套接字的数据
如果没有ifnotdata:break#数据接收,请断开连接
print‘revc :’、data#发送接收到的数据
Conn.sendall(data ) #发送接收的数据
Conn.close(#关闭套接字
客户端: importsocket
HOST=‘192.168.1.13‘#定义目标主机名
PORT=50007#定义目标主机的开放服务端口号
s=Socket.socket(socket.af_inet,socket.SOCK_STREAM ) #选择socket类型和socket数据包类型
s.connect () PORT,PORT )连接到目标主机的套接字
S.Sendall(Hello,world! “) #发送数据
data=s.recv(1024 )接收数据
s.close(#关闭插座
打印‘已接收’,repr (数据) )。
演示:
步骤1 :在服务器端运行服务器端程序[ email protected ] :/mnt/hgfs/python/day5$ pythonserver4. py
===光标正在此等待
步骤2 :在客户端运行客户端程序[ email protected ] :/mnt/hgfs/python/day5$ python client4. py
接收的‘hello,world!===接收从服务端返回的数据
步骤在服务器端观察现象[ email protected ] :/mnt/hgfs/python/day5$ pythonserver4. py
连接by (‘192.168.1.13’,52641 )==客户端已连接,52641是客户端的随机端口号
revc:Hello,world!===从客户端接收数据
译文: 3358 XP leaf.blog.51cto.com/9315560/1700032