python 网络编程

简介: python 网络编程

文章目录

1. 前言

既然是做爬虫开发,必然需要了解Python网络编程方面的知识。计算机网络是把各个计算机连接到一起,让网络中的计算机可以互相通信。网络编程就是如何在程序中实现两台计算机的通信。例如当你使用浏览器访问谷歌网站时,你的计算机就和谷歌的某台服务器通过互联网建立起了连接,然后谷歌服务器会把把网页内容作为数据通过互联网传输到你的电脑上。


网络编程对所有开发语言都是一样的,Python也不例外。使用Python进行网络编程时,实际上是在Python程序本身这个进程内,连接到指定服务器进程的通信端口进行通信,所以网络通信也可以看做两个进程间的通信。


提到网络编程,必须提到的一个概念是Socket。Socket(套接字)是网络编程的一个抽象概念,通常我们用一个Socket表示“打开了一个网络链接”,而打开一个Socket需要知道目标计算机的IP地址和端口号,再指定协议类型即可。Python提供了两个基本的Socket模块:


·Socket,提供了标准的BSD Sockets API。

·SocketServer,提供了服务器中心类,可以简化网络服务器的开发。

下面讲一下Socket模块功能。

2. Socket 类型

套接字格式为:socket(family,type[,protocal]),使用给定的地址族、套接字类型(如表1-2所示)、协议编号(默认为0)来创建套接字

1832b220aa754cd18c504acc7686a560.png

Python网络编程常用的函数,其中包括了TCP和UDP

1832b220aa754cd18c504acc7686a560.png

3. TCP编程

网络编程一般包括两部分:服务端和客户端。TCP是一种面向连接的通信方式,主动发起连接的叫客户端,被动响应连接的叫服务端。首先说一下服务端,创建和运行TCP服务端一般需要五个步骤:

  • 1)创建Socket,绑定Socket到本地IP与端口。
  • 2)开始监听连接。
  • 3)进入循环,不断接收客户端的连接请求。
  • 4)接收传来的数据,并发送给对方数据。
  • 5)传输完毕后,关闭Socket。

下面通过一个例子演示创建TCP服务端的过程,程序如下:

#coding:uft-8
import socket
import threading
import time
def dealclient(sock,addr):
    # 第四步:接收传来的数据,并发送给对方数据
    print(Accept new connection from %s:%s...' % addr)
    sock.send(b'Hello, I am server!')
     while True:
          data = sock.recv(1024)
          time.sleep(1)
          if not data or data.decode('utf-8') == 'exit':
             break
          print('-->>%s!' % data.decode('utf-8'))
          sock.send(('Loop_Msg: %s!' % data.decode('uft-8')).encode('utf-8'))
     # 第五步:关闭Socket
     sock.close()
     print('Connection from %s:%s closed.' % addr)
if __name__ == "__main__":
   # 第一步:创建一个基于IPv4和TCP协议的Socket
   s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
   s.bind(('127.0.0.1',9999))
   # 第二步:监听连接
   s.listen(5)
   print('Waiting for connection...')
   while True:
           # 第三步:接收一个新连接:
           sock, addr = s.accept()
           # 创建新线程来处理TCP连接
           t = threading.Thread(target=dealClient,args=(sock,addr))
           t.start()
  • 1)创建Socket,连接远端地址。
  • 2)连接后发送数据和接收数据。
  • 3)传输完毕后,关闭Socket。
    程序如下:
#coding: utf-8
import socket
s =socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect(('127.0.0.1',9999))
print('-->>' +s.recv(1024).decode('utf-8'))
s.send(b'Hello,I am a client')
print('-->>' +s.recv(1024).decode('utf-8'))
s.send(b'exit')
s.close()

最后看一下运行结果,先启动服务端,再启动客户端。服务端打印的信息如下:

b41705914ab149ed906428aa9032a946.gif

4. UDP编程

TCP通信需要一个建立可靠连接的过程,而且通信双方以流的形式发送数据。相对于TCP,UDP则是面向无连接的协议。使用UDP协议时,不需要建立连接,只需要知道对方的IP地址和端口号,就可以直接发数据包,但是不关心是否能到达目的端。虽然用UDP传输数据不可靠,但是由于它没有建立连接的过程,速度比TCP快得多,对于不要求可靠到达的数据,就可以使用UDP协议。使用UDP协议,和TCP一样,也有服务端和客户端之分。UDP编程相对于TCP编程比较简单,服务端创建和运行只需要三个步骤:

  • 1)创建Socket,绑定指定的IP和端口
  • 2)直接发送数据和接收数据。
  • 3)关闭Socket。
  • 示例程序如下:
$ cat server.py
#coding:utf-8
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.bind(('127.0.0.1', 9999))
print('Bind UDP on 9999...')
while True:
     data, addr = s.recvfrom(1024)
     print('Received from %s:%s.' % addr)
     s.sendto(b'Hello, %s!' % data, addr)

客户端的创建和运行更加简单,创建Socket,直接可以与服务端进行数据交换,示例如下:

$ cat client.py
# coding:utf-8
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
for data in [b'liming', b'jack']:
    s.sendto(data, ('127.0.0.1',9999))
    print(s.recv(1024).decode('utf-8'))
s.close()

image.gif

以上就是UDP服务端和客户端数据交互的流程,UDP的使用与TCP类似,但是不需要建立连接。此外,服务器绑定UDP端口和TCP端口互不冲突,即UDP的9999端口与TCP的9999端口可以各自绑定。

参考:

相关文章
|
1月前
|
搜索推荐 程序员 调度
精通Python异步编程:利用Asyncio与Aiohttp构建高效网络应用
【10月更文挑战第5天】随着互联网技术的快速发展,用户对于网络应用的响应速度和服务质量提出了越来越高的要求。为了构建能够处理高并发请求、提供快速响应时间的应用程序,开发者们需要掌握高效的编程技术和框架。在Python语言中,`asyncio` 和 `aiohttp` 是两个非常强大的库,它们可以帮助我们编写出既简洁又高效的异步网络应用。
116 1
|
3天前
|
Python
Python中的异步编程:使用asyncio和aiohttp实现高效网络请求
【10月更文挑战第34天】在Python的世界里,异步编程是提高效率的利器。本文将带你了解如何使用asyncio和aiohttp库来编写高效的网络请求代码。我们将通过一个简单的示例来展示如何利用这些工具来并发地处理多个网络请求,从而提高程序的整体性能。准备好让你的Python代码飞起来吧!
12 2
|
10天前
|
数据采集 存储 JSON
Python网络爬虫:Scrapy框架的实战应用与技巧分享
【10月更文挑战第27天】本文介绍了Python网络爬虫Scrapy框架的实战应用与技巧。首先讲解了如何创建Scrapy项目、定义爬虫、处理JSON响应、设置User-Agent和代理,以及存储爬取的数据。通过具体示例,帮助读者掌握Scrapy的核心功能和使用方法,提升数据采集效率。
52 6
|
3天前
|
机器学习/深度学习 TensorFlow 算法框架/工具
利用Python和TensorFlow构建简单神经网络进行图像分类
利用Python和TensorFlow构建简单神经网络进行图像分类
14 3
|
8天前
|
数据采集 存储 XML
Python实现网络爬虫自动化:从基础到实践
本文将介绍如何使用Python编写网络爬虫,从最基础的请求与解析,到自动化爬取并处理复杂数据。我们将通过实例展示如何抓取网页内容、解析数据、处理图片文件等常用爬虫任务。
|
11天前
|
数据采集 前端开发 中间件
Python网络爬虫:Scrapy框架的实战应用与技巧分享
【10月更文挑战第26天】Python是一种强大的编程语言,在数据抓取和网络爬虫领域应用广泛。Scrapy作为高效灵活的爬虫框架,为开发者提供了强大的工具集。本文通过实战案例,详细解析Scrapy框架的应用与技巧,并附上示例代码。文章介绍了Scrapy的基本概念、创建项目、编写简单爬虫、高级特性和技巧等内容。
36 4
|
11天前
|
网络协议 物联网 API
Python网络编程:Twisted框架的异步IO处理与实战
【10月更文挑战第26天】Python 是一门功能强大且易于学习的编程语言,Twisted 框架以其事件驱动和异步IO处理能力,在网络编程领域独树一帜。本文深入探讨 Twisted 的异步IO机制,并通过实战示例展示其强大功能。示例包括创建简单HTTP服务器,展示如何高效处理大量并发连接。
33 1
|
12天前
|
数据采集 存储 机器学习/深度学习
构建高效的Python网络爬虫
【10月更文挑战第25天】本文将引导你通过Python编程语言实现一个高效网络爬虫。我们将从基础的爬虫概念出发,逐步讲解如何利用Python强大的库和框架来爬取、解析网页数据,以及存储和管理这些数据。文章旨在为初学者提供一个清晰的爬虫开发路径,同时为有经验的开发者提供一些高级技巧。
12 1
|
14天前
|
Kubernetes 网络协议 Python
Python网络编程:从Socket到Web应用
在信息时代,网络编程是软件开发的重要组成部分。Python作为多用途编程语言,提供了从Socket编程到Web应用开发的强大支持。本文将从基础的Socket编程入手,逐步深入到复杂的Web应用开发,涵盖Flask、Django等框架的应用,以及异步Web编程和微服务架构。通过本文,读者将全面了解Python在网络编程领域的应用。
16 1
|
15天前
|
机器学习/深度学习 人工智能 算法
【车辆车型识别】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+算法模型
车辆车型识别,使用Python作为主要编程语言,通过收集多种车辆车型图像数据集,然后基于TensorFlow搭建卷积网络算法模型,并对数据集进行训练,最后得到一个识别精度较高的模型文件。再基于Django搭建web网页端操作界面,实现用户上传一张车辆图片识别其类型。
56 0
【车辆车型识别】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+算法模型
下一篇
无影云桌面