【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端的数据
相关文章
|
14天前
|
安全 Java 数据处理
Python网络编程基础(Socket编程)多线程/多进程服务器编程
【4月更文挑战第11天】在网络编程中,随着客户端数量的增加,服务器的处理能力成为了一个重要的考量因素。为了处理多个客户端的并发请求,我们通常需要采用多线程或多进程的方式。在本章中,我们将探讨多线程/多进程服务器编程的概念,并通过一个多线程服务器的示例来演示其实现。
|
14天前
|
程序员 开发者 Python
Python网络编程基础(Socket编程) 错误处理和异常处理的最佳实践
【4月更文挑战第11天】在网络编程中,错误处理和异常管理不仅是为了程序的健壮性,也是为了提供清晰的用户反馈以及优雅的故障恢复。在前面的章节中,我们讨论了如何使用`try-except`语句来处理网络错误。现在,我们将深入探讨错误处理和异常处理的最佳实践。
|
1月前
|
缓存 算法 测试技术
Python中的装饰器:原理与实践
【2月更文挑战第29天】 在Python编程领域,装饰器是一种强大的工具,它允许我们在不修改原始函数代码的情况下,增加或修改函数的行为。本文将深入探讨Python装饰器的概念、实现原理以及实际应用,帮助读者掌握这一技术并在实际项目中灵活运用。
|
1月前
|
数据处理 C# C++
如何使用C#和C++结构体实现Socket通信
如何使用C#和C++结构体实现Socket通信
|
1天前
|
存储 网络协议 关系型数据库
Python从入门到精通:2.3.2数据库操作与网络编程——学习socket编程,实现简单的TCP/UDP通信
Python从入门到精通:2.3.2数据库操作与网络编程——学习socket编程,实现简单的TCP/UDP通信
|
13天前
|
网络协议 Java API
Python网络编程基础(Socket编程)Twisted框架简介
【4月更文挑战第12天】在网络编程的实践中,除了使用基本的Socket API之外,还有许多高级的网络编程库可以帮助我们更高效地构建复杂和健壮的网络应用。这些库通常提供了异步IO、事件驱动、协议实现等高级功能,使得开发者能够专注于业务逻辑的实现,而不用过多关注底层的网络细节。
|
14天前
|
机器学习/深度学习 人工智能 算法
|
17天前
|
Python
Python网络编程基础(Socket编程)UDP服务器编程
【4月更文挑战第8天】Python UDP服务器编程使用socket库创建UDP套接字,绑定到特定地址(如localhost:8000),通过`recvfrom`接收客户端数据报,显示数据长度、地址和内容。无连接的UDP协议使得服务器无法主动发送数据,通常需应用层实现请求-响应机制。当完成时,用`close`关闭套接字。
|
19天前
|
监控 物联网 Linux
python测试串口最大通信速率
【4月更文挑战第5天】
|
23天前
|
网络协议 Unix Linux
Socket通信详细介绍1
Socket通信详细介绍
30 0