【Python之旅】第五篇(一):Python Socket通信原理

简介:

 只要和网络服务涉及的,就离不开Socket以及Socket编程,下面就说说Python Socket通信的基本原理。


1.Socket

    socket也称作“套接字”,用于描述IP地址和端口,是一个通信链的句柄。应用程序通常通过“套接字”向网络发出请求或者应答网络请求。可以列举中国移动或者是中国电信等的电话客服,当然,也可以看下面的图片来作形象的说明。

    socket起源于Unix,而Unix/Linux基本哲学之一就是:一切皆文件,即都可以用“打开open—>读写write/read—>关闭close”模式来操作。Socket就是该模式的一个实现,socket即是一种特殊的文件,一些socket函数就是对其进行的操作(读/写IO、打开、关闭)。

    可以看下面的图示来形象说明:

wKioL1YPYV-ASBXxAAG4ZzVVxxg286.jpg

2.Socket编程

(1)Socket服务器编程

    主要包括下面的几步:

1.打开socket

2.绑定到一个地址和端口

3.侦听进来的连接

4.接受连接

5.读写数据


(2)Socket客户端编程

    主要包括下面的几步:

1.打开socket

2.连接到一个地址和端口

3.读写数据


3.Socket类型

    Socket从类型上分,可以有以下几种:

socket类型 适用范围 说明
socket.AF_UNIX 只能够用于单一的Unix系统进程间通信 不能在不同主机之间通信
socket.AF_INET 服务器之间网络通信 目前常用的就是这种
socket.AF_INET6 IPv6 由于IPv6未推广,也少用

    上面是socket的类型,细分的话还有socket的数据包类型,图示如下:

wKiom1YPZeHgW_wqAAHUjUnzsUk309.jpg

    常用的是第一种和第二种,即for TCP和for UDP的类型,当然socket.SOCK_RAW也需要注意,因为它可以构造IP头,因此沿着这个思路,可以合伪造不同源IP地址的数据包,以对一些中小型企业服务器发动Dos攻击。


4.Socket函数

    对socket进行相关操作如“读/写IO、打开、关闭”的函数即是Socket函数,可以看下面的图示:

wKioL1YPZkWQ7j2kAAKpXDeEktM173.jpgwKiom1YPZlnxRJORAACWrVeJL3E983.jpg

wKiom1YPZoLBYyhJAAIovv5QHqs076.jpgwKiom1YPZp-AtJwoAAIlQjSur0Y883.jpg    只需要记住常用的就可以,即通常会在Server端和Client端中编程会用到的,可以见下面的例子。


5.Socket例子

    下面就写一个单线程非交互式的socket,在本机里实现通信就好了。

Server端:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import  socket                #导入socket类
 
HOST = ''                      #定义侦听本地地址口(多个IP地址情况下),这里表示侦听所有,也可以写成 0.0 . 0.0
PORT =  50007                  #Server端开放的服务端口
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)    #选择Socket类型和Socket数据包类型
s.bind((HOST, PORT))         #绑定IP地址和端口
s.listen( 1 )                  #定义侦听数开始侦听(实际上并没有效果)
conn, addr = s.accept()      #定义实例,accept()函数的返回值可以看上面的socket函数说明
 
print  'Connected by' , addr
while  1 :
     data = conn.recv( 1024 )    #接受套接字的数据
     if  not data: break          #如果没有数据接收,则断开连接
     print  'revc:' ,data        #发送接收到的数据
     conn.sendall(data)        #发送接收到的数据
conn.close()                      #关闭套接字


Client端:

1
2
3
4
5
6
7
8
9
10
11
import  socket
 
HOST =  '192.168.1.13'         #定义目标主机名
PORT =  50007                  #定义目标主机开放服务端口号
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  #选择Socket类型和Socket数据包类型 
s.connect((HOST, PORT))      #连接到目标主机的socket(套接字)中
 
s.sendall( 'Hello, world!' )   #发送数据
data = s.recv( 1024 )          #接收数据
s.close()                    #关闭socket
print  'Received' , repr(data)


演示:

步骤1:Server端运行服务端程序

1
2
xpleaf@xpleaf-machine:/mnt/hgfs/Python/day5$ python server4.py 
===>光标在此处处于等待状态

步骤2:Client端运行客户端程序

1
2
xpleaf@xpleaf-machine:/mnt/hgfs/Python/day5$ python client4.py 
Received 'Hello, world!    ===>收到服务端返回的数据

步骤3:在Server端中观察现象

1
2
3
xpleaf@xpleaf-machine:/mnt/hgfs/Python/day5$ python server4.py 
Connected by ( '192.168.1.13' 52641 )    ===>有客户端连接进来, 52641 为Client的随机端口号
revc: Hello, world!                     ===>收到来自Client端的数据
相关文章
|
17天前
|
搜索推荐 Python
快速排序的 Python 实践:从原理到优化,打造你的排序利器!
本文介绍了 Python 中的快速排序算法,从基本原理、实现代码到优化方法进行了详细探讨。快速排序采用分治策略,通过选择基准元素将数组分为两部分,递归排序。文章还对比了快速排序与冒泡排序的性能,展示了优化前后快速排序的差异。通过这些分析,帮助读者理解快速排序的优势及优化的重要性,从而在实际应用中选择合适的排序算法和优化策略,提升程序性能。
29 1
|
1月前
|
Python
Socket学习笔记(二):python通过socket实现客户端到服务器端的图片传输
使用Python的socket库实现客户端到服务器端的图片传输,包括客户端和服务器端的代码实现,以及传输结果的展示。
140 3
Socket学习笔记(二):python通过socket实现客户端到服务器端的图片传输
|
1月前
|
JSON 数据格式 Python
Socket学习笔记(一):python通过socket实现客户端到服务器端的文件传输
本文介绍了如何使用Python的socket模块实现客户端到服务器端的文件传输,包括客户端发送文件信息和内容,服务器端接收并保存文件的完整过程。
154 1
Socket学习笔记(一):python通过socket实现客户端到服务器端的文件传输
|
27天前
|
Kubernetes 网络协议 Python
Python网络编程:从Socket到Web应用
在信息时代,网络编程是软件开发的重要组成部分。Python作为多用途编程语言,提供了从Socket编程到Web应用开发的强大支持。本文将从基础的Socket编程入手,逐步深入到复杂的Web应用开发,涵盖Flask、Django等框架的应用,以及异步Web编程和微服务架构。通过本文,读者将全面了解Python在网络编程领域的应用。
23 1
|
1月前
|
消息中间件 监控 网络协议
Python中的Socket魔法:如何利用socket模块构建强大的网络通信
本文介绍了Python的`socket`模块,讲解了其基本概念、语法和使用方法。通过简单的TCP服务器和客户端示例,展示了如何创建、绑定、监听、接受连接及发送/接收数据。进一步探讨了多用户聊天室的实现,并介绍了非阻塞IO和多路复用技术以提高并发处理能力。最后,讨论了`socket`模块在现代网络编程中的应用及其与其他通信方式的关系。
|
1月前
|
网络协议 Linux 应用服务中间件
Socket通信之网络协议基本原理
【10月更文挑战第10天】网络协议定义了机器间通信的标准格式,确保信息准确无损地传输。主要分为两种模型:OSI七层模型与TCP/IP模型。
|
1月前
|
安全 网络协议 网络安全
Python Socket编程大揭秘:从菜鸟到黑客的进阶之路,你准备好了吗?
【10月更文挑战第4天】在编程领域,Python Socket编程犹如一把开启网络世界的钥匙,带领开发者从简单数据传输迈向复杂应用构建。本文将引导你从零开始,逐步掌握Socket编程的核心技巧,包括基本概念、TCP服务器与客户端的搭建、并发处理及异常管理、SSL/TLS加密通信,直至深入了解网络协议与安全漏洞。通过实战演练与理论学习,助你成为驾驭网络世界的高手。
35 1
|
1月前
|
存储 Python
Python中的多进程通信实践指南
Python中的多进程通信实践指南
23 0
|
5天前
|
存储 数据挖掘 开发者
Python编程入门:从零到英雄
在这篇文章中,我们将一起踏上Python编程的奇幻之旅。无论你是编程新手,还是希望拓展技能的开发者,本教程都将为你提供一条清晰的道路,引导你从基础语法走向实际应用。通过精心设计的代码示例和练习,你将学会如何用Python解决实际问题,并准备好迎接更复杂的编程挑战。让我们一起探索这个强大的语言,开启你的编程生涯吧!
|
11天前
|
机器学习/深度学习 人工智能 TensorFlow
人工智能浪潮下的自我修养:从Python编程入门到深度学习实践
【10月更文挑战第39天】本文旨在为初学者提供一条清晰的道路,从Python基础语法的掌握到深度学习领域的探索。我们将通过简明扼要的语言和实际代码示例,引导读者逐步构建起对人工智能技术的理解和应用能力。文章不仅涵盖Python编程的基础,还将深入探讨深度学习的核心概念、工具和实战技巧,帮助读者在AI的浪潮中找到自己的位置。
下一篇
无影云桌面