[python学习] 专题七.网络编程之套接字Socket、TCP和UDP通信实例

2023-11-09

        很早以前研究过C#和C++的网络通信,参考我的文章: 
                C#网络编程之Tcp实现客户端和服务器聊天
                C#网络编程之套接字编程基础知识
                C#网络编程之使用Socket类Send、Receive方法的同步通讯       

        Python网络编程也类似。同时最近找工作笔试面试考察Socket套接字、TCP\UDP区别比较多,所以这篇文章主要精简了《Python核心编程(第二版)》第16章内容。内容包括:服务器和客户端架构、套接字Socket、TCP\UDP通信实例和常见笔试考题。最后希望文章对你有所帮助,如果有不足之处,还请海涵~        

 

一. 服务器和客户端架构

1.什么是客户端/服务区架构?
        书中的定义是服务器是一个软件或硬件,用于向一个或多个客户端(客户)提供所需要的“服务”。服务器存在的唯一目的就是等待客户的请求,给这些客户服务,然后再等待其他的请求。而客户连接上(预先已知的)服务器,提出自己的请求,发送必要的数据,然后等待服务器完成请求或说明失败原因的反馈。
        服务器不停的处理外来的请求,而客户一次只能提出一个服务的请求,等待结果。再结束这个事务。客户之后可以再提出其他的请求,只是这个请求会被视为另一个不同的事务了。

2.硬件客户端/服务器架构和软件客户端/服务器架构
        硬件的客户端/服务器架构,例如打印服务器、文件服务器(客户可以远程把服务器的磁盘映射到自己本体并使用);软件客户端/服务器架构主要是程序的运行、数据收发、升级等,最常见的是Web服务器、数据库服务器。如一台机器存放一些网页或Web应用程序,然后启动服务。其服务器的任务就是接受客户端的请求,把网页发给客户端(如用户计算机上的浏览器),然后再等待下一个客户端请求。

3.客户端/服务器网络编程
        在完成服务之前,服务器必须要先完成一些设置。先要先创建一个通讯端点,让服务器能“监听”请求。你可以把我们服务器比作一个公司的接待员或回答公司总线电话的话务员,一旦电话和设备安装完成,话务员也就到位后,服务就开始了。
        同样一旦通信端点创建好之后,我们在“监听”的服务器就可以进入它那等待和处理客户请求的无限循环中了。服务器准备好之后,也要通知潜在的客户,让它们知道服务器已经准备好处理服务了,否则没人会提请求的。所以需要把公司电话公开给客户。
        而客户端只要创建一个通信端点,建立到服务器的连接,然后客户端就可以提出请求了。请求中也可以包含必要的数据交互。一旦请求处理完成,客户端收到了结果,通信就结束了。这就是客户端和服务器的简单网络通信。

 

二. 套接字Socket

1.什么是套接字
        套接字是一种具有之前所说的“通信端点”概念的计算网络数据结构。相当于电话插口,没它无法通信,这个比喻非常形象。
        套接字起源于20世纪70年代加州伯克利分校版本的Unix,即BSD Unix。又称为“伯克利套接字”或“BSD套接字”。最初套接字被设计用在同一台主机上多个应用程序之间的通讯,这被称为进程间通讯或IPC。
        套接字分两种:基于文件型和基于网络的
        第一个套接字家族为AF_UNIX,表示“地址家族:UNIX”。包括Python在内的大多数流行平台上都使用术语“地址家族”及其缩写AF。由于两个进程都运行在同一台机器上,而且这些套接字是基于文件的,所以它们的底层结构是由文件系统来支持的。可以理解为同一台电脑上,文件系统确实是不同的进程都能进行访问的。
        第二个套接字家族为AF_INET,表示”地址家族:Internet“。还有一种地址家族AF_INET6被用于网际协议IPv6寻址。Python 2.5中加入了一种Linux套接字的支持:AF_NETLINK(无连接)套接字家族,让用户代码与内核代码之间的IPC可以使用标准BSD套接字接口,这种方法更为精巧和安全。
        Python只支持AF_UNIX、AF_NETLINK和AF_INET家族。网络编程关注AF_INET。
        如果把套接字比作电话的查看——即通信的最底层结构,那主机与端口就相当于区号和电话号码的一对组合。一个因特网地址由网络通信必须的主机与端口组成。
        而且另一端一定要有人接听才行,否则会提示”对不起,您拨打的电话是空号,请查询后再拨“。同样你也可能会遇到如”不能连接该服务器、服务器无法响应“等。合法的端口范围是0~65535,其中小于1024端口号为系统保留端口。

2.面向连接与无连接
        面向连接:
通信之前一定要建立一条连接,这种通信方式也被成为”虚电路“或”流套接字“。面向连接的通信方式提供了顺序的、可靠地、不会重复的数据传输,而且也不会被加上数据边界。这意味着,每发送一份信息,可能会被拆分成多份,每份都会不多不少地正确到达目的地,然后重新按顺序拼装起来,传给正等待的应用程序。
        实现这种连接的主要协议就是传输控制协议TCP。要创建TCP套接字就得创建时指定套接字类型为SOCK_STREAM。TCP套接字这个类型表示它作为流套接字的特点。由于这些套接字使用网际协议IP来查找网络中的主机,所以这样形成的整个系统,一般会由这两个协议(TCP和IP)组合描述,即TCP/IP。
        无连接:无需建立连接就可以通讯。但此时,数据到达的顺序、可靠性及不重复性就无法保障了。数据报会保留数据边界,这就表示数据是整个发送的,不会像面向连接的协议先拆分成小块。它就相当于邮政服务一样,邮件和包裹不一定按照发送顺序达到,有的甚至可能根本到达不到。而且网络中的报文可能会重复发送。
        那么这么多缺点,为什么还要使用它呢?由于面向连接套接字要提供一些保证,需要维护虚电路连接,这都是严重的额外负担。数据报没有这些负担,所有它会更”便宜“,通常能提供更好的性能,更适合某些场合,如现场直播要求的实时数据讲究快等。
        实现这种连接的主要协议是用户数据报协议UDP。要创建UDP套接字就得创建时指定套接字类型为SOCK_DGRAM。这个名字源于datagram(数据报),这些套接字使用网际协议来查找网络主机,整个系统叫UDP/IP。     

3.socket()模块函数
        使用socket模块的socket()函数来创建套接字。语法如下:
            socket(socket_family, socket_type, protocol=0)
        其中socket_family不是AF_VNIX就是AF_INET,socket_type可以是SOCK_STREAM或者SOCK_DGRAM,protocol一般不填,默认值是0。
        创建一个TCP/IP套接字的语法如下:
             tcpSock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        同样创建一个UDP/IP套接字的语法如下:
             udpSock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        由于socket模块中有太多属性,所以使用"from socket import *"语句,把socket模块里面的所有属性都带到命名空间中,大幅缩短代码。调用如下:
             tcpSock = socket(AF_INET, SOCK_STREAM)

4.套接字对象方法
       下面是最常用的套接字对象方法:
       服务器端套接字函数

socket类型

描述

s.bind()

绑定地址(主机号 端口号对)到套接字

s.listen()

开始TCP监听

s.accept()

被动接受TCP客户端连接,(阻塞式)等待连续的到来

       客户端套接字函数

socket类型

描述

s.connect()

主动初始化TCP服务器连接

s.connect_ex()

connect()函数扩展版本,出错时返回出错码而不是跑出异常

       公共用途的套接字函数

 

socket类型

描述

s.recv()

接受TCP数据

s.send()

发送TCP数据

s.sendall()

完整发送TCP数据

s.recvfrom()

接受UDP数据

s.sendto()

发送UDP数据

s.getpeername()

连接到当前套接字的远端地址(TCP连接)

s.getsockname()

获取当前套接字的地址

s.getsockopt()

返回指定套接字的参数

s.setsockopt()

设置指定套接字的参数

s.close()

关闭套接字

        面模块的套接字函数

socket类型

描述

s.setblocking()

设置套接字的阻塞与非阻塞模式

s.settimeout()

设置阻塞套接字操作的超时时间

s.gettimeout()

得到阻塞套接字操作的超时时间

面文件的接字函数

socket类型

描述

s.fileno()

套接字的文件描述符

s.makefile()

创建一个与套接字关联的文件对象


        提示:在运行网络应用程序时,如果能够使用在不同的电脑上运行服务器和客户端最好不过,它能让你更好理解通信过程,而更多的是方位localhost或127.0.0.1.

 

三. TCP通信实例

1.服务器 tcpSerSock.py
        核心操作如下:
        ss = socket()                # 创建服务器套接字
        ss.bind()                   # 地址绑定到套接字上
        ss.listen()                      # 监听连接
             inf_loop:                       # 服务器无限循环
                  cs = ss.accept()       # 接受客户端连接 阻塞式:程序连接之前处于挂起状态
             comm_loop:                 # 通信循环
                  cs.recv()/cs.send()   # 对话 接受与发送数据
             cs.close()                      # 关闭客户端套接字 
             ss.close()                      # 关闭服务器套接字 (可选)

# -*- coding: utf-8 -*- 
from socket import *
from time import ctime

HOST = 'localhost'          #主机名
PORT =  21567               #端口号
BUFSIZE = 1024              #缓冲区大小1K
ADDR = (HOST,PORT)

tcpSerSock = socket(AF_INET, SOCK_STREAM)
tcpSerSock.bind(ADDR)       #绑定地址到套接字
tcpSerSock.listen(5)        #监听 最多同时5个连接进来

while True:                 #无限循环等待连接到来
    try:
        print 'Waiting for connection ....'
        tcpCliSock, addr = tcpSerSock.accept()  #被动接受客户端连接
        print u'Connected client from : ', addr

        while True:
            data = tcpCliSock.recv(BUFSIZE)     #接受数据
            if not data:
                break
            else:
                print 'Client: ',data
            tcpCliSock.send('[%s] %s' %(ctime(),data)) #时间戳

    except Exception,e:
        print 'Error: ',e
tcpSerSock.close()          #关闭服务器


2.客户端 tcpCliSock.py
        核心操作如下:
        cs = socket()                 # 创建客户端套接字
             cs.connect()                  # 尝试连接服务器
             comm_loop:                 # 通讯循环
                  cs.send()/cs.recv()    # 对话 发送接受数据
             cs.close()                       # 关闭客户端套接字

# -*- coding: utf-8 -*- 
from socket import *

HOST = 'localhost'          #主机名
PORT =  21567               #端口号 与服务器一致
BUFSIZE = 1024              #缓冲区大小1K
ADDR = (HOST,PORT)

tcpCliSock = socket(AF_INET, SOCK_STREAM)
tcpCliSock.connect(ADDR)    #连接服务器

while True:                 #无限循环等待连接到来
    try:
        data = raw_input('>')
        if not data:
            break
        tcpCliSock.send(data)            #发送数据
        data = tcpCliSock.recv(BUFSIZE)  #接受数据
        if not data:
            break
        print 'Server: ', data
    except Exception,e:
        print 'Error: ',e
        
tcpCliSock.close()          #关闭客户端


3.运行结果及注意
        由于服务器被动地无限循环等待连接,所以需要先运行服务器,再开客户端。又因为我的Python总会无法响应,所以采用cmd运行服务器Server程序,Python IDLE运行客户端进行通信。运行结果如下图所示:
        如果出现错误[Error] Bad file descriptor表示服务器关闭客户端连接了,删除即可

 

 

        建议:创建线程来处理客户端请求。SocketServer模块是一个基于socket模块的高级别的套接字通信模块,支持新的线程或进处理户端请求。同时建议在退出和调用服务器close()函数时使用try-except语句

四. UDP通信实例

1.服务器 udpSerSock.py
        核心操作如下:
        ss = socket()                # 创建服务器套接字
        ss.bind()                   # 绑定服务器套接字
             inf_loop:                       # 服务器无限循环
                  cs = ss.recvfrom()/ss.sendto()         
                                                  # 对话 接受与发送数据
             ss.close()                      # 关闭服务器套接字 

# -*- coding: utf-8 -*- 
from socket import *
from time import ctime

HOST = ''                   #主机名
PORT =  21567               #端口号
BUFSIZE = 1024              #缓冲区大小1K
ADDR = (HOST,PORT)

udpSerSock = socket(AF_INET, SOCK_DGRAM)
udpSerSock.bind(ADDR)       #绑定地址到套接字

while True:                 #无限循环等待连接到来
    try:
        print 'Waiting for message ....'
        data, addr = udpSerSock.recvfrom(BUFSIZE)          #接受UDP
        print 'Get client msg is: ', data
        udpSerSock.sendto('[%s] %s' %(ctime(),data), addr) #发送UDP
        print 'Received from and returned to: ',addr

    except Exception,e:
        print 'Error: ',e
udpSerSock.close()          #关闭服务器

2.客户端 udpCliSock.py
        核心操作如下:
        cs = socket()                            # 创建客户端套接字
             inf_loop:                                  # 服务器无限循环
                  cs.sendto()/cs.recvfrom()   # 对话 接受与发送数据                                                
             cs.close()                                 # 关闭客户端套接字 

 

# -*- coding: utf-8 -*- 
from socket import *

HOST = 'localhost'          #主机名
PORT =  21567               #端口号 与服务器一致
BUFSIZE = 1024              #缓冲区大小1K
ADDR = (HOST,PORT)

udpCliSock = socket(AF_INET, SOCK_DGRAM)

while True:                 #无限循环等待连接到来
    try:
        data = raw_input('>')
        if not data:
            break
        udpCliSock.sendto(data, ADDR)            #发送数据
        data,ADDR = udpCliSock.recvfrom(BUFSIZE)  #接受数据
        if not data:
            break
        print 'Server : ', data

    except Exception,e:
        print 'Error: ',e
        
udpCliSock.close()          #关闭客户端

3.运行结果及注意
        UDP服务器不是面向连接的,所以不需要设置什么东西,直接等待连接就好。同时由于数据报套接字是无连接的,所以无法把客户端连接交给另外的套接字进行后续的通讯,这些服务器只是接受消息,需要的话加时间错后返回一个收到的结果给客户端。
        UDP客户端与TCP客户端唯一区别就是不用去UDP服务器建立连接,而是直接把消息发送出去,然后等待服务器回复即可。
        运行结果如下图所示:白色为客户端输入消息,黑色为服务器收到消息并回复。当Client输入"Hello, I am Client"时,服务器显示该消息并返回时间戳和收到的信息给客户端。


总结:
        后面大家自己可以阅读下SocketServer模块,它是标准库中一个高级别的模块,用于简化实现网络客户端和服务器所需的大量样板代码。该模块中已经实现了一些可供使用的类直接调用几块。
        Twisted框架是一个完全事件驱动的网络框架。它允许你使用和开发完全异步的网络应用程序和协议。
        这些东西我更倾向于分享原理和底层的一些东西吧!同时最近考到的笔试题包括:TCP和UDP的区别、socket其中的参数含义、TCP三次握手及传递的参数、写个socket通讯伪代码。
       总之,希望文章对你有所帮助~
       (By:Eastmount 2015-10-5 早上8点 http://blog.csdn.net/eastmount/

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

[python学习] 专题七.网络编程之套接字Socket、TCP和UDP通信实例 的相关文章

  • httplib.BadStatusLine: '' 在 Linux 上,但在 Mac 上则不然

    这个错误已经困扰我几个小时了 我决定编写一个单独的项目 只是为了看看我是否可以复制它 而且我可以 但只能在我的服务器上复制 这适用于我的 Mac Mac OSX El Capitan 10 11 6 服务器 CentOS 7 2 1511
  • 在 sympy 绘图中,如何获得具有固定纵横比的绘图?

    如果我用这个片段画一个圆 from sympy import x y symbols x y p1 plot implicit Eq x 2 y 2 1 aspect ratio 1 1 我会得到一个像这样的图形窗口 现在长宽比不是我所期望
  • goJS 下拉菜单删除项目

    我有简单的 python Flask goJS 图形应用程序 如下所示 节点和链接文本的源是从应用程序的后端加载的 我将它们设置为model modelData像这样的部分 var graphDataString JSON parse di
  • python类型中的__flags__有什么用

    我最近阅读了pickle源代码 以下代码在copy reg让我很困惑 HEAPTYPE 1 lt lt 9 def reduce ex self proto assert proto lt 2 for base in self class
  • matplotlib 的 pcolor 中的白线

    在某些 pdf 查看器 例如 OSX 上的 Preview 中 使用以下命令绘制的图matplotlib的 pcolor 有白线 见下图 我怎样才能摆脱它们 源代码非常简单 选择任何数据x y z import matplotlib mat
  • Django 和 AWS 简单电子邮件服务 [重复]

    这个问题在这里已经有答案了 我正在尝试启动并运行 django 站点 并且正在尝试启用 django 的标准密码重置服务 我的网站由 AWS EC2 托管 因此我想将 AWS SES 用于我的电子邮件服务 但是 我无法使 smtp 连接正常
  • 如何逐行替换(更新)文件中的文本

    我试图通过读取每一行 测试它 然后写入是否需要更新来替换文本文件中的文本 我不想保存为新文件 因为我的脚本已经先备份文件并对备份进行操作 这是我到目前为止所拥有的 我从 os walk 获取路径 并且保证 pathmatch var 正确返
  • Pandas cut 方法不包括下限

    我正在尝试对包含 0 到 100 范围内的年龄的数据帧列进行分箱 当我尝试使用垃圾箱来包含零年龄时 它不起作用 这是一个使用包含我的数据范围的列表的演示 pd cut pd Series range 101 0 24 49 74 100 范
  • 点击后 Dash DropDown 关闭

    我不希望下拉菜单在选择值后关闭 我希望它在我的页面上保持打开状态 我正在使用 dcc Dropdown dcc Dropdown id job type options self options placeholder Select one
  • Python/Scipy 2D 插值(非均匀数据)

    这是我上一篇文章的后续问题 Python Scipy 插值 地图坐标 https stackoverflow com questions 5124126 python scipy interpolation map coordinates
  • 将Python嵌入到C中——导入模块

    我在使用嵌入式 Python for C 时遇到问题文档 http docs python org extending embedding html 每当我尝试使用导入的模块时 我都会得到 PythonIncl exe 中 0x1e089e
  • Python服务器“通常只允许每个套接字地址使用一次”

    我正在尝试用 python 创建一个非常基本的服务器 它侦听端口 当客户端尝试连接时创建 TCP 连接 接收数据 发回某些内容 然后再次侦听 并无限期地重复该过程 这是我到目前为止所拥有的 from socket import server
  • 如何在Python中重命名virtualenv?

    我拼错了名字virtualenv使用以下方法初始化它 virtualenv vnev 我实际上打算创建一个名为的环境venv 尝试重命名后vnev文件夹到venv 我发现这并没有提供太多帮助 激活环境的名称仍然重命名旧的vnev mv vn
  • 使用 django-profiles 以配置文件形式编辑相关模型

    我在用着Django 配置文件 http bitbucket org ubernostrum django profiles wiki Home在我的应用程序中 因为它为我提供了一些简单的视图 可以帮助我更快地到达我想去的地方 但是 我有一
  • 在 CSV 文件的最上面一行写入

    我有这个sample csv 文件 a 1 apple b 2 banana c 3 cranberry d 4 durian e 5 eggplant 并有以下代码 samplefile open sample csv rb rows s
  • 如何在Python中仅列出顶级目录?

    我希望能够仅列出某个文件夹内的目录 这意味着我不需要列出文件名 也不需要其他子文件夹 让我们看看一个例子是否有帮助 在当前目录中我们有 gt gt gt os listdir os getcwd cx Oracle doc DLLs Doc
  • Python,质数检查器[重复]

    这个问题在这里已经有答案了 你好 我正在创建一个函数来检查一个数字是否是素数 但它告诉我 9 是一个素数 def eprimo num if num lt 2 return False if num 2 return True else f
  • 如何找到 JAR:/home/hadoop/contrib/streaming/hadoop-streaming.jar

    我正在练习有关 Amazon EMR 的复数视角视频教程 我被困住了 因为我收到此错误而无法继续 Not a valid JAR home hadoop contrib streaming hadoop streaming jar 请注意
  • 如何从集合中检索元素而不删除它?

    假设如下 gt gt gt s set 1 2 3 我如何获得一个值 任何值 s不做s pop 我想将该项目保留在集合中 直到我确定可以删除它 这只有在异步调用另一个主机之后才能确定 又快又脏 gt gt gt elem s pop gt
  • 我收到错误:rest_framework.request.WrappedAttributeError:'CSRFCheck'对象没有属性'process_request'

    urls py from django conf urls import url from django contrib import admin from django conf import settings from django c

随机推荐

  • widows家庭版没有Hyper-v的解决方式

    首先这个是我在安装docker的时候遇到的问题 下面记录一下 复制下面代码到一个文本文件中去 然后修改后缀名为cmd然后运行即可 pushd dp0 dir b SystemRoot servicing Packages Hyper V m
  • jQuery.extend 函数详解

    转载自 http www cnblogs com RascallySnake archive 2010 05 07 1729563 html jQuery extend 函数详解 jQuery 的 extend 扩展方法 jQuery 的扩
  • 【构建ML驱动的应用程序】第 1 章 :从产品目标到 ML 框架

    大家好 我是Sonhhxg 柒 希望你看完之后 能对你有所帮助 不足请指正 共同学习交流 个人主页 Sonhhxg 柒的博客 CSDN博客 欢迎各位 点赞 收藏 留言 系列专栏 机器学习 ML 自然语言处理 NLP 深度学习 DL fore
  • 光耦电路

    光电耦合器 opticalcoupler 英文缩写为OC 亦称光电隔离器或光耦合器 简称光耦 它是以光为媒介来传输电信号的器件 通常把发光器 红外线发光二极管LED 与受光器 光敏半导体管 封装在同一管壳内 当输入端加电信号时发光二极管发出
  • python 实现 soap 请求

    1 什么是soap SOAP Simple Object Access Protocol 是一种基于XML的通信协议 用于在网络上交换结构化的和可扩展的信息 它被广泛用于分布式系统中的应用程序之间的通信 SOAP通过HTTP 或其他传输协议
  • AI绘画爆火背后:扩散模型(Diffusion Model)原理综述

    来源 知乎 大仲马 地址 https zhuanlan zhihu com p 562389931 本综述 Diffusion Models A Comprehensive Survey of Methods and Application
  • Linux下TCP通信时如果一方拔掉网线会怎么样?

    本文95 参考下面的链接 拔掉网线后 原本的 TCP 连接还存在吗 TCP协议 长连接和短连接 如果没有数据传输 不能被TCP感知到 TCP连接状态依旧保持 如果有数据传输 重传次数超过一定值 Linux下默认15 或超过一定的 超时时间则
  • 笔试

    文章目录 前言 1 什么叫FPGA 2 什么叫数字IC 3 FPGA设计流程 3 1系统规划 3 2RTL输入 3 3行为仿真 功能仿真 3 4逻辑综合 3 5综合后仿真 可选 3 6综合后设计分析 时序及资源 3 7设计实现 包括布局布线
  • 1024 祝我们快乐

    1024 祝我们快乐 前言 最近好久都很忙 所以没有在发过文章啦 但是今天这么激动的日子 还是忍不住想要祝你们快乐哈 感谢很多人的默默陪伴 比如平台 展现量直接上万 比如 你们 超级感谢 很感激你们的支持 虽说我不是最优秀的那一个 但是你们
  • spring 容器(控制反转及依赖注入)

    spring 是一个容器 项目开始就一直在运行 spring 加载进内存里面 容器中有监听器 引入容器 而struts注重运行时 核心类中监听器 监听启动后可以从context 上下文即spring所有的配置 中获取内容 将核心配置文件 a
  • 将本地的txt文件上传到mysql数据库中

    我的数据 1 将windows中的txt文件传入到Linux中 2 在mysql中将表创建好 例如 create table users userid int time date id int sex varchar 10 birthday
  • .NET 各种框架

    基于 NET平台常用的框架整理 分布式缓存框架 Microsoft Velocity 微软自家分布式缓存服务框架 Memcahed 一套分布式的高速缓存系统 目前被许多网站使用以提升网站的访问速度 Redis 是一个高性能的KV数据库 它的
  • No.87-HackTheBox-windows-Bankrobber-Walkthrough渗透学习

    HackTheBox windows Bankrobber Walkthrough 靶机地址 https www hackthebox eu home machines profile 209 靶机难度 初级 3 2 10 靶机发布日期 2
  • 神经网络主要有三个基本要素:权重、偏置和激活函数

    神经网络主要有三个基本要素 权重 偏置和激活函数 权重 神经元之间的连接强度由权重表示 权重的大小表示可能性的大小 偏置 偏置的设置是为了正确分类样本 是模型中一个重要的参数 相当于加入一个常数 激活函数 起非线性映射的作用 其可将神经元的
  • 数据结构与算法(C语言)

    第一章 数据结构绪论 1 什么是程序 程序 数据结构 算法 2 逻辑结构 物理结构的区别用法 基本的目标就是将数据及其逻辑关系存储到计算机的内存中 一 逻辑结构 逻辑结构是指数据对象中数据元素之间的相互关系 逻辑结构是面向问题的 A 集合结
  • 新手入门Linux-Ubuntu20.04

    打开此文 首先祝你在使用Linux过程中如鱼得水 其次 如果是为了检验DIY 装 能力 X 请耐心观看 如果是想有一个很奈斯的环境去写代码 请移步Deepin 国产Deepin也日渐成熟且UI很不错 一 配置基础的设置 设置自动登录 设置T
  • MATLAB实现多元线性回归

    function b bint r rint stats Multiple linear regression X y alpha Multiple linear regression 多元线性回归 对于输入数据 必须是去除量纲之后的数据
  • 【linux】linux shell 判断是安装了某个软件

    1 概述 判断是否安装了node if type node gt dev null 2 gt 1 then echo node 未安装 else echo node 已安装 fi 判断是否安装了npm if type npm gt dev
  • stm32AD单通道与多通道转换(DMA)

    第三章AD转换 本章的内容分两部分 第一是AD的单通道转换 第二是AD的多通道转换 首先先将单通道转换 STM32中自带的AD最大的转换频率是14MHZ 共有16个转换通道 每个转 ADC123 IN10表明PC0管脚可以作为AD1 AD2
  • [python学习] 专题七.网络编程之套接字Socket、TCP和UDP通信实例

    很早以前研究过C 和C 的网络通信 参考我的文章 C 网络编程之Tcp实现客户端和服务器聊天 C 网络编程之套接字编程基础知识 C 网络编程之使用Socket类Send Receive方法的同步通讯 Python网络编程也类似 同时最近找工