网络编程
Posted lws865
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了网络编程相关的知识,希望对你有一定的参考价值。
Transmission Control Protocol/Internet Protocol的简写,中译名为传输控制协议/因特网互联协议,又名网络通讯协议,是Internet最基本的协议、Internet国际互联网络的基础,由网络层的IP协议和传输层的TCP协议组成。
TCP/IP 定义了电子设备如何连入因特网,以及数据如何在它们之间传输的标准。协议采用了4层的层级结构,每一层都呼叫它的下一层所提供的协议来完成自己的需求。通俗而言:TCP负责发现传输的问题,一有问题就发
出信号,要求重新传输,直到所有数据安全正确地传输到目的地。而IP是给因特网的每一台联网设备规定一个地址。
Socket简介 网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。 建立网络通信连接至少要一对端口号(socket)。socket本质是编程接口(API),对TCP/IP的封装,TCP/IP也要提供
可供程序员做网络开发所用的接口,这就是Socket编程接口;HTTP是轿车,提供了封装或者显示数据的具体形式;Socket是发动机,提供了网络通信的能力。
socket模块 在python的socket编程中,实用socket模块的时候,是不能实现多个连接的,当然如果加入其它的模块是可以的,例如select模块,在这里见到的介绍下socketserver模块。 socketserver,看其名字,就知道是
一个socket的服务器模块的使用,在这个模块中,主要也就是实现服务器类的相关功能,在其中,也就是将socket模块和select模块进行了封装,从而创建了一些基类供人使用。
服务器端套接字函数
s.bind():绑定地址(主机名、端口号对)到套接字
s.listen():开始TCP监听
s.accept():被动接受TCP客户端连接,(阴塞式)等待连接的到来
客户端套接字函数
s.connect():主动初始化TCP服务器连接
s.connect_ex():connect()函数的扩展版本,出错时返回出错码,而不是执出异常
服务器
服务器进程首先要绑定一个端口并监听来自其他客户端的连接。如果某个客户端连接过来了,服务器就与该客户端建立Socket连接,随后的通信就靠这个Socket连接了。 所以,服务器会打开固定端口(比如80)监听,每来一
个客户端连接,就创建该Socket连接。由于服务器会有大量来自客户端的连接,所以,服务器要能够区分一个Socket连接是和哪个客户端绑定的。一个Socket依赖4项:服务器地址、服务器端口、客户端地址、客户端端口来唯
一确定一个Socket。 但是服务器还需要同时响应多个客户端的请求,所以,每个连接都需要一个新的进程或者新的线程来处理,否则,服务器一次就只能服务一个客户端了。
客户端
大多数连接都是可靠的TCP连接。创建TCP连接时,主动发起连接的叫客户端,被动响应连接的叫服务器。 举个例子,当我们在浏览器中访问新浪时,我们自己的计算机就是客户端,浏览器会主动向新浪的服务器发起连接。
如果一切顺利,新浪的服务器接受了我们的连接,一个TCP连接就建立起来的,后面的通信就是发送网页内容了。
UDP编程
1.TCP是建立可靠连接,并且通信双方都可以以流的形式发送数据。相对TCP,UDP则是面向无连接的协议。
2.使用UDP协议时,不需要建立连接,只需要知道对方的IP地址和端口号,就可以直接发数据包。但是,能不能到达就不知道了。
3.虽然用UDP传输数据不可靠,但它的优点是和TCP比,速度快,对于不要求可靠到达的数据,就可以使用UDP协议。
urllib模块
urllib是python内置的HTTP请求库,无需安装即可使用,它包含了4个模块:
request:它是最基本的http请求模块,用来模拟发送请求
error:异常处理模块,如果出现错误可以捕获这些异常
parse:一个工具模块,提供了许多URL处理方法,如:拆分、解析、合并等
robotparser:主要用来识别网站的robots.txt文件,然后判断哪些网站可以爬
GET请求
urllib的request模块可以非常方便地抓取URL内容,也就是发送一个GET请求到指定的页面,然后返回HTTP的响应
如果我们要想模拟浏览器发送GET请求,就需要使用Request对象,通过往Request对象添加HTTP头,我们就可以把请求伪装成浏览器
POST请求
urllib的request模块可以非常方便地抓取URL内容,也就是发送一个GET请求到指定的页面,然后返回HTTP的响应
如果我们要想模拟浏览器发送GET请求,就需要使用Request对象,通过往Request对象添加HTTP头,我们就可以把请求伪装成浏览器
HTTP协议规定post提交的数据必须放在消息主体中,但是协议并没有规定必须使用什么编码方式。服务端通过是根据请求头中的Content-Type
字段来获知请求中的消息主体是用何种方式进行编码,再对消息主体进行解析。具体的编码方式包括: application/x-www-form-urlencoded 最
常见post提交数据的方式,以form表单形式提交数据。 application/json 以json串提交数据。 multipart/form-data 一般使用来上传文件。
UDP服务端
1 import socket 2 3 #1.创建套接字 4 udp_s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) 5 6 #2.绑定IP和端口号 7 udp_s.bind((‘192.168.1.102‘,4395)) 8 9 while True: 10 #接收消息 11 #data是从客户端发送过来的消息,addr是元组格式,存储IP和端口号 12 data,addr = udp_s.recvfrom(1025) 13 print(addr) 14 #打印出客户端发送过来的消息,data.decode(‘utf-8,‘):将字符转为中文格式 15 print(data.decode(‘utf-8,‘),addr) 16 #udp_s.sendto:发送消息。 17 udp_s.sendto(‘服务器发送的消息‘.encode(‘utf-8‘),addr) 18 19 #关闭套接字 20 udp_s.close()
UDP客户端
1 import socket 2 3 #创建套接字 4 udp_c = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) 5 6 #绑字端口号 7 udp_c.bind((‘192.168.1.102‘,6969)) 8 9 #发送消息 10 udp_c.sendto(‘客户端发送的消息‘.encode(‘utf-8‘),(‘192.168.1.102‘,4399)) 11 12 #接收消息 13 data,addr = udp_c.recvfrom(1024) 14 print(data.decode(‘utf-8‘),addr) 15 udp_c.close()
以上是关于网络编程的主要内容,如果未能解决你的问题,请参考以下文章
VSCode自定义代码片段14——Vue的axios网络请求封装
VSCode自定义代码片段14——Vue的axios网络请求封装