iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >python的网络编程基础知识有哪些
  • 161
分享到

python的网络编程基础知识有哪些

2023-06-26 03:06:30 161人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

这篇“python的网络编程基础知识有哪些”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Python的网络编程基础知识有哪些

这篇“python网络编程基础知识有哪些”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Python网络编程基础知识有哪些”文章吧。

    一.什么是网络编程

    网络编程涉及到一些计算机基础知识,还跟你的电脑系统有关,Mac os/linuxwindows是不同的,由于我用的是windows,所以以下所有都是windows操作系统的适用的,并且里面的字符编码windows和mac os也是不同的,这里我们实现的只是简单的服务端发送什么,客户端就接收到什么,之后还会有模拟ssh的远程命令还有粘包问题,最后也可以实现文件的下载。

    网络编程还涉及到重要的一部分理论知识包括什么是网络还有比较重要的五层协议,以我的理解,这些东西就是专业的告诉你,在你的电脑上假设要接收一些文件,这些东西是怎么传输过来的,你的电脑又是怎么接收的,所以这里无非就是你的电脑即客户端和传输文件的一方即服务点进行的一个交互,这些我都建议你去听一下(我感觉以个人能力讲这些会有点水平不足)但是大的方面都离不开一种交互。

    二.Socket

    众所周知,python功能的强大很大一方面就在于它有强大的第三方外部库,socket这个库又叫套接字,专业解释就是应用程序通常通过"套接字"向网络发出请求或者应答网络请求,使主机间或者一台计算机上的进程间可以通讯,进而通过socket这个库就可以实现我在前面所说的客户端和服务端的交互。

    1.socket的基本语法

    socket(family,type,[protocol])

    其中的family有三种

    socket.AF_UNIX 只能够用于单一的Unix系统进程间通信

    socket.AF_INET 服务器之间网络通信

    socket.AF_INET6 IPv6

    type也有三种

    socket.SOCK_STREAM 流式socket , 当使用tcp时选择此参数

    socket.SOCK_DGRAM数据报式socket ,当使用UDP时选择此参数

    socket.SOCK_RAW 原始套接字,普通的套接字无法处理ICMP、IGMP等网络报文,而SOCK_RAW可以;其次,SOCK_RAW也可以处理特殊的IPv4报文;此外,利用原始套接字,可以通过IP_HDRINCL套接字选项由用户构造IP头。

    而protocol 指明所要接收的协议类型,通常为0或者不填,基本上是不写的

    2.与socket有关的一些函数

    服务端函数

    address一般指你的电脑上的ip地址,即你打开Windows的命令提示符,你联网之后输入ipconfig命令,里面的IPV4

    s.bind(address)将套接字绑定到地址,即在客户端中,你要把你的程序绑定一个ip和端口才能实现交互

    s.listen(backlog)操作系统可以挂起的最大连接数量。即你的服务端最多能把数据传给几个客户端

    s.accept()接受TCP连接并返回(conn,address),其中conn是新的套接字对象,可以用来接收和发送数据。address是连接客户端的地址。

    客户端函数

    s.connect(address)连接到客户端address处的套接字

    s.recv(bufsize)接受TCP套接字的数据。数据以字符串形式返回,bufsize指定要接收的最大数据量。

    公共函数

    s.send(string)

    发送TCP数据。将string中的数据发送到连接的套接字。返回值是要发送的字节数量,该数量可能小于string的字节大小。

    s.sendall(string)

    完整发送TCP数据。将string中的数据发送到连接的套接字,但在返回之前会尝试发送所有数据。成功返回None,失败则抛出异常。

    s.recvfrom(bufsize)

    接受UDP套接字的数据。与recv()类似,但返回值是(data,address)。其中data是包含接收数据的字符串,address是发送数据的套接字地址。

    s.sendto(string,address)

    发送UDP数据。将数据发送到套接字,address是形式为(ipaddr,port)的元组,指定远程地址。返回值是发送的字节数。

    s.close()

    关闭套接字。

    三.程序需求

    既然是实现一种交互,那么生活中打电话和接收电话也可以理解为一种交互,打电话就可以理解为发送数据,收电话就可以理解为接收数据,这样就有了服务端和客户端,这里我们以这样一种场景实现交互。

    服务端分析

    如果你要发送数据首先你得有一个手机然后引入socket进行交互,然后你要进行一系列的绑定操作即你需要上面的函数来实现,首先你在客户端模拟一个手机引入socket之后,你需要进行绑定,开机,等待电话链接,收发消息,挂电话等功能

    注意:

    在绑定操作过程中,你需要联网之后输入你本机的ip地址,即你打开命令提示符你输入ipconifg命令的IPV4地址

    在绑定你的地址后后面会加一个端口号,这个端口号是任意的,不过有时候会被占用,被占用则更改以下就好

    在手法消息中还有一个upper函数,是将客户端发送过来的数据以大写的形式在发送给客户端

    在客户端用accept是接受TCP连接并返回(conn,address)

    --------------------------------服务端----------------------import socket#1.买手机phone = socket.socket(socket.AF_INET,socket.SOCK_STREAM)# print(phone)         #测试你的手机 #2.插卡 绑定手机卡phone.bind(("192.168.2.18",3234)) #3.开机phone.listen(5)   #5代表最大挂起的连接数 #4.等电话链接print("starting")conn,client_add = phone.accept() # 5.收发消息data=conn.recv(1024)         #1024代表接收数据的最大数,单位是bitsprint("客户端数据",data) conn.send(data.upper()) #6.挂电话conn.close() #7.关机phone.close()

    客户端分析

    服务端分析完,客户端和服务端是一一对应的,在收发消息这里,客户端给服务端发送一个小写的hello,服务端就又会给客户端回一个大写的HELLO

    -------------------------------客户端-----------------------------import socket#1.买手机phone = socket.socket(socket.AF_INET,socket.SOCK_STREAM)# print(phone) #2.拨号phone.connect(("192.168.2.18",3234)) #3.发收消息 phone.send("hells".encode("utf"))data=phone.recv(1024)print(data)  phone.close()

    四.代码升级

    加上通信循环

    上面的代码我们可以看出,我们实现的太简单了,我们只是固定的让它收发消息,我们如何让这个程序在客户端和服务端之间循环并且收发你想要的东西呢,这是我们加入输入和循环就可以

    ----------------------------服务端------------------------import socket phone = socket.socket(socket.AF_INET,socket.SOCK_STREAM)# print(phone)phone.bind(("172.20.10.4",3234))phone.listen(5)   print("starting")conn,client_add = phone.accept()print(client_add) while True:    data=conn.recv(1024)            print("客户端数据",data)     conn.send(data.upper()) conn.close()phone.close()
    ----------------------------------客户端------------------------import socket phone = socket.socket(socket.AF_INET,socket.SOCK_STREAM)# print(phone)phone.connect(("172.20.10.4",3234)) while True:    msg = input(">>>:").strip()    phone.send(msg.encode("utf-8"))    data=phone.recv(1024)    print(data) phone.close()

    大家可以看到,我们只是在客户端里面加入了循环输入功能如何在服务端里加入循环,这样就可以实现一种循环输入

      加上连接循环以及完善

    我们以上的程序都是一个客户端对应一个服务端,但是真正应该服务端可以对应多个客户端收发数据。我们主要修改的是服务端代码,客户端代码应该是变化不大的,除了客户端应该加一个判断是否有数据发送。

    我们没有学习并发编程,所以我们的代码用循环来实现即你的服务端接受完一个客户端的数据以后,你可以继续去接收另一个客户端的数据

    除此之外我们还加上了一行代码用于判断你的端口是否被占用这样就可以减少出错

    我在加上一个客户端之后我们会出现另外一个问题就是我们到底需不需要另一个客户端传输的数据或者说我们的多个客户端到底有没有都发送数据,所以我们这里需要一个try和except先去判断一下

    --------------------------------服务端-----------------------import socket phone = socket.socket(socket.AF_INET,socket.SOCK_STREAM)phone.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)  #判断接口是否被占用phone.bind(("172.20.10.4",3234))phone.listen(5)   print("starting")while True:       #没有学习并发编程 没办法执行代码后返回到这继续执行,所以用循环解决    conn,client_add = phone.accept()    print(client_add)    while True:        try:            data=conn.recv(1024)                     if not data:break                     print("客户端数据",data)            conn.send(data.upper())        except ConnectionResetError :            break            conn.close()phone.close()
    -----------------客户端1-----------------import socket phone = socket.socket(socket.AF_INET,socket.SOCK_STREAM)phone.connect(("172.20.10.4",3234)) while True:    msg = input(">>>:").strip()    if not msg: continue          #若输入空则继续循环    phone.send(msg.encode("utf-8"))    # print("if send none")    data=phone.recv(1024)    print(data)    # print(data.decode("utf-8")) phone.close()
    -----------------------------客户端2---------------------import socket phone = socket.socket(socket.AF_INET,socket.SOCK_STREAM)phone.connect(("172.20.10.4",3234)) while True:    msg = input(">>>:").strip()    if not msg: continue          #若输入空则继续循环    phone.send(msg.encode("utf-8"))    # print("if send none")    data=phone.recv(1024)    print(data)    # print(data.decode("utf-8")) phone.close()

    以上就是关于“python的网络编程基础知识有哪些”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注编程网Python频道。

    --结束END--

    本文标题: python的网络编程基础知识有哪些

    本文链接: https://www.lsjlt.com/news/306647.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    本篇文章演示代码以及资料文档资料下载

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档
    猜你喜欢
    • python的网络编程基础知识有哪些
      这篇“python的网络编程基础知识有哪些”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“python的网络编程基础知识有哪些...
      99+
      2023-06-26
    • 网络基础知识有哪些
      这篇文章主要介绍网络基础知识有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!网络是由若干节点和连接这些节点的链路构成,表示诸多对象及其相互联系。在数学上,网络是一种图,一般认为专指加权图。网络除了数学定义外,还有...
      99+
      2023-06-27
    • C#网络编程入门基础知识有哪些
      这篇文章主要介绍“C#网络编程入门基础知识有哪些”,在日常操作中,相信很多人在C#网络编程入门基础知识有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C#网络编程入门基础知识有哪些”的疑惑有所帮助!接下来...
      99+
      2023-06-17
    • 网络安全的基础知识有哪些
      今天小编给大家分享一下网络安全的基础知识有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。什么是链接?  &nb...
      99+
      2023-06-04
    • Docker的网络基础知识点有哪些
      这篇文章主要介绍“Docker的网络基础知识点有哪些”,在日常操作中,相信很多人在Docker的网络基础知识点有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Docker的网络基础知识点有哪些”的疑惑有所...
      99+
      2023-06-27
    • shell编程基础知识有哪些
      这篇文章主要介绍了shell编程基础知识有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1、文件类型介绍linux系统中主要包括以下七种文件类型: d 目录 - 普通文件...
      99+
      2023-06-09
    • JavaScript编程基础知识有哪些
      这篇“JavaScript编程基础知识有哪些”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“...
      99+
      2022-10-19
    • java网络爬虫的基础知识有哪些
      这篇文章主要介绍“java网络爬虫的基础知识有哪些”,在日常操作中,相信很多人在java网络爬虫的基础知识有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”java网络爬虫的基础知识有哪些”的疑惑有所帮助!...
      99+
      2023-06-16
    • Python编程中常用的基础知识有哪些
      本篇内容介绍了“Python编程中常用的基础知识有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1、正则表达式替换目标:将字符串line...
      99+
      2023-06-02
    • 有哪些Python基础知识
      这篇文章主要介绍“有哪些Python基础知识”,在日常操作中,相信很多人在有哪些Python基础知识问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”有哪些Python基础知识”的疑惑有所帮助!接下来,请跟着小编...
      99+
      2023-06-25
    • Java编程基础知识点有哪些
      这篇文章主要介绍“Java编程基础知识点有哪些”,在日常操作中,相信很多人在Java编程基础知识点有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java编程基础知识点有...
      99+
      2022-10-19
    • 浅谈java网络编程基础知识
      这篇文章主要浅谈java网络编程基础知识,内容简而易懂,希望大家可以学习一下,学习完之后肯定会有收获的,下面让小编带大家一起来看看吧。网络基础知识1、OSI分层模型和TCP/IP分层模型的对应关系这里对于7层模型不展开来讲,只选择跟这次系列...
      99+
      2023-05-30
      java ava
    • Python基础知识点有哪些
      本篇内容主要讲解“Python基础知识点有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python基础知识点有哪些”吧!Python程序文件结构程序→模块→语句→表达式Python的关键要...
      99+
      2023-06-02
    • Python的基础知识点有哪些
      本篇内容介绍了“Python的基础知识点有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!python简介python是一种面向对象的解释...
      99+
      2023-06-02
    • JAVA编程语言的基础知识有哪些
      这篇文章主要介绍“JAVA编程语言的基础知识有哪些”,在日常操作中,相信很多人在JAVA编程语言的基础知识有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”JAVA编程语言的基础知识有哪些”的疑惑有所帮助!...
      99+
      2023-06-17
    • Java并发编程的基础知识有哪些
      今天小编给大家分享一下Java并发编程的基础知识有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。 01、简介首...
      99+
      2023-06-16
    • Python协程及asyncio基础知识有哪些
      小编给大家分享一下Python协程及asyncio基础知识有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Python协程及asyncio基础知识协程(cor...
      99+
      2023-06-15
    • Python零基础知识点有哪些
      这篇“Python零基础知识点有哪些”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Python零基础知识点有哪些”文章吧。P...
      99+
      2023-06-17
    • python爬虫基础知识有哪些
      这篇文章主要介绍“python爬虫基础知识有哪些”,在日常操作中,相信很多人在python爬虫基础知识有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”python爬虫基础知识有哪些”的疑惑有所帮助!接下来...
      99+
      2023-06-02
    • JAVA编程语言的基础知识点有哪些
      本篇内容介绍了“JAVA编程语言的基础知识点有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1、面向对象的特征有哪些方面抽象:抽象就是忽...
      99+
      2023-06-17
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作