网络的概念:主机   端口  IP  协议

服务器:

localhost/127.0.0.1

客户端:

只是在本机启动客户端,用127.0.0.1访问

服务器:

0.0.0.0

客户端:

可以在本机用127.0.0.1、192.168.0.1

服务器:

192.168.0.1

客户端:

局域网内用192.168.0.1

socket(创建套接字) --->

bind(绑定地址) --->

listen(设置监听)--->

accept(等待链接) --->

recv/send(收/发消息) --->

close ()

收发函数特性:

recv特征:

如果建立的另一端链接被断开, 则recv立即返回空字符串

recv是从接受缓冲区取出内容,当缓冲区为空则阻塞

recv如果一次接受不完缓冲区的内容,下次执行会自动接受

send特征:

如果发送的另一端不存在则会产生Pipe Broken异常

send是从发送缓冲区发送内容,当缓冲区为满则堵塞

网络的收发缓存区:

在内存中开辟区域,用于

发送和接受的缓冲

作用:

协调数据的收发(接受和处理)速度

减少和磁盘的交互

sendall(date):

功能:

tcp套接字发送消息

参数:同

send

返回值:如果

发送成功则

返回None

否则返回异常

tcp粘包:

产生原因:

1.

tcp传输以

字节流的方式

发送消息,

消息之间没有边界

2.发送比

接受的速度快

影响:

对每次发送的内容是一个独立的意识需要单独识别时 容易使用原文件被更改

如何处理:

1.每次发送后

追加一个结尾标志,代表本次发送完毕

2.

发送一个

数据结构

3.

每次发送有一个

时间间隔

基于udp的服务端编程:

1.创建套接字:

sockfd = socket(AF_INET,SOCK_DGRAM)

2.绑定地址:

sockfd.bind()

3.消息收发

data, addr = sockfd.

recvfrom(buffersize)

功能:接受udp消息

参数:接受消息的大小

返回值:

data接受到的内容

addr消息发送的地址

recvfrom每次接受一个报文,

如果没有接受到的内容则直接丢弃

sockfd.

sendto(data, addr)

功能:udp消息发送

参数:

data 要发送的内容 bytes

addr 目标地址

返回:发送字节数

4.关闭套接字:

socket.close()

import

sys

sys.argv

作用:

获取从命令行获取的参数内容

Python3 demo.py参数1, 参数2.....

sys.argv[0]是命令本身(程序本身)

tcp流式套接字和udp数据报套接字区别:

1.流式套接字采用字节流的方式进行传输,

而数据报套接字使用数据报形式传输数据

2.tcp套接字会产生粘包,udp不会

3.tcp编程可以保证消息的完整性,udp则不一定

4.tcp需要listen、accept、udp不用

5.tcp消息的发送接收使用recv、send、sendall、

udp使用recvfrom,sendto

socket模块和

套接字属性(s为套接字)

s.type:表示套接字类型

s.family:地址类型

套接字属性方法

s.fileno()

功能:

获取套接字的

文件描述符

文件描述符:

每一个IO事件 操作系统都会分配一个不同的的正整数,

该正整数即为此IO操作的文件描述符

默认开启的描述符:

sys.stdin      0

sys.stdout   1

sys.stderr    2

s.getsockname()

功能:

获取套结字绑定

的地址

s.

getpeername()

功能:

获取链接套接字

客户端的地址

s.setsockopt(level,optname, value)

(#

设置端口可立即重用 必须在链接端口前设置

s.setsockopt(SOL_SOcKET, SO_REUSEADDR))

功能:设置套接字选项

参数:

level:设置

选项的类型(大类型)  常用:SOL_SOCKET

optname:

子类选项

value:

要设置的值

s.getsockopt(level

, optname)

功能:

获取套接字选项值

参数:

level:选项的类型

udp套接字应用--->

广播

一点发送多点接收

目标地址:广播地址 172.18.32

.255

tcp应用---> http传输

http协议:

超文本传输协议

用途:

网站中浏览器

网页的获取,基于

网站事物

数据传输

编写基于http协议的

数据传输

特点:

1.

应用层协议,传输层使用tcp服务

2.

简单、灵活,可以使用

多种编程语言操作

3.无状态的协议,既不用记录用户的输入内容

4.

http1.1  ---> http2.0(还没发布)

技术的成熟和稳定性

http请求(request):

请求格式:

1.请求行:说明具体的

请求类别和内容

GET    /index.html    /HTTP/1.1

请求类别   请求内容    协议版本

请求类别:

GET:              获取网络资源

POST:           提交一定的附加数据

HEAD:          获取响应头

PUT:            更新服务器资源

DELETE:        删除服务器资源

CONNECT:   未使用

TRACE:         用于测试

OPTIONS:    获取服务器性能信息

2.请求头:对

请求的具体描述

Accept:text/html

每一个键值对占一行,描述了一个特定信息

3.空行

4.请求体: 具体的

参数或提交的

内容

get参数或者post提交的内容

http响应(response):

响应格式:

1.响应行:

反馈具体的

响应情况

HTTP/1.1     20       OK

版本协议   响应码   附加信息

响应码:

1xx:提示信息,表示请求已经接收

2xx:响应成功

3xx:响应需要定向(重新记载链接第三方链接)

4xx:客户端错误

5xx:服务器端错误

常见响应码:

200  成功

404  请求

内容不存在

401 没有访问

权限

500  服务器

未知错误

503

服务器暂时

无法执行

2.响应头:对响应

内容的具体描述

3.空行

4.响应体:

将客户端请求内容进行返回

这里这个图就看了一眼 没特意去记  凭印象画的  可能不对 但是大体逻辑应该没错

我去百度搜了 什么也没搜到 不知道是不是我的打开方式不对还是什么

只搜到了上面的两张图..........

总结:

tcp,udp协议的区别和编程实现上的差异:

tcp:

tcp是一种可靠的、面向有链接数据传输服务

tcp能够保证数据的完整性、顺序性、无重复以及无差错

tcp是一种以文件流的形式传输数据的服务 文件流之间是没有边界

的所以基友可能会产生粘包的情况 粘包是因为接受速度没有传输速度快

导致缓存区的数据拥堵 下次取出数据时从而产生非独立数据的链接 这种情况

叫做粘包  粘包只有传输多个数据时才会出现

tcp的编程需要监听套接字 和 等待链接过程 只有链接成功才能发送数据

这种情况叫做三次握手、还有断开时的四次挥手

三次挥手:客户端请求链接、服务器返回报文、客户端完成链接

四次挥手:客户端请求断开、服务器接受请求、服务器准备完毕可以断开、客户端断开

tcp收发送消息需要使用recv、send、sendall方法

sendall比特殊 功能和send一样 但sendall有事务  若发送成功返回None 否则触发异常

链接时必须先运行服务器端后运行客户端

udp:

udp就比较简单了  是面向无连接的不可靠的数据传输服务

udp没有数据流  接受大小取决于接收方

若数据超出接收方接受范围则丢掉所有超出范围的内容

udp不存在粘包的情况

udp不需要等待链接 没有挥手过程 先发就发 想收就收 自由度比较高

udp编程时收发消息使用recvfrom、sendto方法

udp可用于广播可以随时断开或链接

客户端和服务器端可以随时运行

什么是http?

http 是超文本传输协议

一种网络数据传输的协议

没错就是  协议

并且所有的www文件都必须遵守这个标准

http作用是什么?

可以用力来网站中浏览器网页获取,基于网站上的一些数据传输 例如目前我正在打的字......

编写基于http协议的数据传输

http协议 请求和响应的格式以及每一部分做什么

请求部分:

请求行:请求的具体类别和内容   比如说  类别、内容、版本协议

请求头:请求具体描述

空行:就是空行

请求体:请求具体参数或内容

响应部分:

响应行:具体响应情况     比如说  版本协议 、响应码 、附加信息

响应头:响应具体描述

空行

响应体:响应具体参数或内容

http协议中请求的基本类型和作用:

GET:获取网络资源

POST:提交一定的附加数据

HEAD:获取响应头 响应返回的文件信息

PUT:更新服务器资源

DELETE:删除服务器资源

TRACE:用于测试

OPIONS:获取服务器性能信息

CONNECT:备用

http协议响应码的类型和表达含义:

以1开头的表示请求已经链接

以2开头的表示成功接收、提示

以3开头的代表重新定向进一步处理 第三方

以4开头的客户端错误

以5开头的服务器错误

http协议请求网页的流程:

建立连接、发送请求、响应请求、断开链接

这样的一个过程称为一个事物

文件传输示例:

服务器端

from socket import *

from time importsleep

s=socket()

s.bind(('0.0.0.0',8888))

s.listen(5)

c,addr=s.accept()print("Connect from",addr)

f= open('img.jpg','rb')#将文件名称告知对方

c.send('img.jpg'.encode())

sleep(0.1)whileTrue:

data= f.read(1024)if notdata:breakc.send(data)

sleep(0.1)

c.send('##'.encode())

data= c.recv(1024)print(data.decode())

f.close()

c.close()

s.close()

客户端

from socket import *s=socket()

s.connect(('172.60.50.181',8888))

filename= s.recv(1024).decode()

f= open('/home/tarena/'+filename,'wb')whileTrue:

data= s.recv(1024)if data == b'##':breakf.write(data)

s.send("接收完成".encode())

f.close()

s.close()

python udp socket 缓冲区大小_Python网络编程(socket模块、缓冲区、http协议)相关推荐

  1. python socket tcp客户端_python网络编程socketserver模块(实现TCP客户端/服务器)

    摘录python核心编程 socketserver(python3.x版本重新命名)是标准库中的网络编程的高级模块.通过将创建网络客户端和服务器所必须的代码封装起来,简化了模板,为你提供了各种各样的类 ...

  2. python网络套接字_Python网络编程-socket套接字

    套接字对象(内置)方法 socket()模块函数 要创建套接字,必须用socket.socket()函数socket(socket_family,socket_type,protocol=0)其中,s ...

  3. python socket 主动断开_Python网络编程tcp详解(基础篇十四)

    网络编程tcp 1 TCP详解 <1> tcp概述 TCP:英文全拼(Transmission Control Protocol)简称传输控制协议,它是一种面向连接的.可靠的.基于字节流的 ...

  4. python socket connect 阻塞_python 网络编程(socketserver,阻塞,其他方法)

    重点回顾: (重点)粘包 : 就是因为接收端不知道如何接收数据,造成接收数据的混乱的问题 只发生在tcp协议上. 因为tcp协议的特点是面向数据流形式的传输 粘包的发生主要是因为tcp协议有两个机制: ...

  5. python网络通信传输的数据类型_Python网络编程中的网络数据和网络错误。

    上一个章节我们说的是套接字名和DNS.这篇文章我们主要解决下面问题. 我们在两台主机之间建立与关闭TCP流连接以及UDP数据报连接后.我们应该怎么准备我们需要传输的数据,该怎么对数据进行编码与格式化. ...

  6. python输出字体的大小_Python密码学编程:文件的加密与解密

    在之前的章节中,编写的程序只能操作较少的信息,这些信息往往是以字符串的形式直接写在代码中的.但本章中的程序可以对整个文件进行加密和解密,文件的大小可以包括成千上万个字符. 本章要点 open()方法. ...

  7. python同时发送与接收_python网络编程之多线程同时接受和发送

    本文实例为大家分享了python多线程同时接受和发的具体代码,供大家参考,具体内容如下 ''' 模仿qq 同时可以发送信息和接受信息多线程 ''' from socket import * from ...

  8. python tkinter获取屏幕大小_Python GUI编程|使用Tkinter制作快递查询软件

    GUI(图形用户界面)想必大家都不陌生,简单来说就是将代码变成可以交互式操作的界面.在Python中就提供了多个图形开发界面的库,比如Tkinter.wxPython.Jython等,本文将使用Tki ...

  9. python socket清空接收缓冲区_Python网络编程——修改套接字发送和接收的缓冲区大小...

    很多情况下,默认的套接字缓冲区大小可能不够用.此时,可以将默认的套接字缓冲区大小改成一个更合适的值. 1. 代码 # ! /usr/bin/env python # -*- coding: utf-8 ...

最新文章

  1. 树莓派私有云(OwnCloud)搭建(三) OwnCloud安装
  2. linux bash shell 常用快捷键
  3. kafka--storm--mongodb
  4. 为什么`malloc`出来的内存也能当成对象正常使用
  5. 云服务器上安装jboss_jboss的使用和安装
  6. 设计模式(4)--AbstractFactory(抽象工厂模式)--创建型
  7. PHP开发自己的框架必备知识点
  8. 在Java 9中使用sun.misc.Unsafe
  9. Cloud一分钟 | 云存储服务商​Egnyte获7500万美元E轮融资,高盛领投
  10. geoserver发布瓦片数据_OpenLayers教程十八:多源数据加载之矢量切片
  11. eBPF 入门之编程
  12. Javascript - 面向对象
  13. Spring:Spring源码下载、保存、编译
  14. 光谱分析中的变量选择
  15. SSD时代,你的固态硬盘选哪款?
  16. 【软考三】软设下午题第一大题--数据流图(做题)
  17. 数组名和数组名取地址 的区别
  18. 用飞信批量加好友——解放鼠标,更解放你的手!
  19. HTML广告位出售单页网页模板源码分享
  20. Win10右击个性化后报错“该文件没有与之关联的应用来执行该操作

热门文章

  1. WARNING: Ignoring invalid distribution -ensorboard
  2. 王者荣耀的觉悟AI是怎么训练的?
  3. Linux常用命令及参数(1)
  4. Ubuntu 安装WPS
  5. 关于数据库收缩的几点建议
  6. bilibili网页练习
  7. Java基础篇 | Java开发环境的搭建
  8. 智能驾驶新一轮芯片争夺战开启
  9. 使用chatgpt生成测试数据
  10. 领域建模之数据模型设计方法论