Python socket详解,全网最全教程

这篇具有很好参考价值的文章主要介绍了Python socket详解,全网最全教程。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

嗨喽,大家好呀~这里是爱看美女的茜茜呐

python socket,python,python,php,开发语言,pycharm

Socket编程

1.基本概念
1.什么是客户端/服务器架构?

服务器就是一系列硬件或软件,为一个或多个客户端(服务的用户)提供所需的“服务”。

它存在唯一目的就是等待客户端的请求,
并响应它们(提供服务),然后等待更多请求。

说白了就是一个提供服务,一个请求服务得到相应的一个过程。

2.套接字:通信端点

套接字是计算机网络数据结构,它体现了上节中描述的“通信端点”的概念。

在任何类型的通信开始之前,网络应用程序必须创建套接字。

可以将它们比作电话插孔,没有它将无法进行通信。

Python只支持AF_UNIX、AF_NETLINK、AF_TIPC 和 AF_INET ,重点使用基于网络的AF_INET.

3.套接字地址:主机-端口对

它是网络通信过程中端点的抽象表示,python使用元组保存:ADDR = (HOST,PORT)。

4.套接字类型

流式套接字(SOCK_STREAM):用于提供面向连接、可靠的数据传输服务。

数据报套接字(SOCK_DGRAM):提供了一种无连接的服务。

该服务并不能保证数据传输的可靠性,数据有可能在传输过程中丢失或出现数据重复,且无法保证顺序地接收到数据。


👇 👇 👇 更多精彩机密、教程,尽在下方,赶紧点击了解吧~

资料、视频教程、代码、插件安装教程等我都准备好了,直接在文末名片自取就可


2.Python网络编程

2.1 常见的套接字对象方法和属性

python socket,python,python,php,开发语言,pycharm

2.2 创建服务和客户端

2.2.1 创建TCP服务

一般的创建流程:

ss = socket()       #  创建服务器套接字
ss.bind(ADDR)       #  套接字与地址绑定
ss.listen()         #  监听连接
while True:         #  服务器无限循环
cs = ss.accept()    #  接受客户端连接
comm_loop:          #  通信循环
cs.recv()/cs.send() #  对话(接收 / 发送)
cs.close()          #  关闭客户端套接字
ss.close()          #  关闭服务器套接字 # (可选)

2.2.2 创建 TCP 客户端

一般的创建流程:

cs = socket()       #  创建客户端套接字
cs.connect()        #  尝试连接服务器
comm_loop:          #  通信循环
cs.send()/cs.recv() #  对话(发送 / 接收)
cs.close()          #  关闭客户端套接字

2.2.3 创建UDP服务

一般的创建流程:

ss = socket()       #  创建服务器套接字
ss.bind(ADDR)       #  套接字与地址绑定
while True:         #  服务器无限循环
ss.sendto()         #  发送 
ss.recvfrom()       #  接收
ss.close()          #  关闭服务器套接字 # (可选)

2.2.4 创建 UDP 客户端

一般的创建流程:

cs = socket()       #  创建客户端套接字
comm_loop:          #  通信循环
cs.sendto()         #  发送 
cs.recvfrom()       #  接收
cs.close()          #  关闭客户端套接字

server.py代码

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:702813599
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
import socket
from time import ctime
import json
import time
HOST = ''
PORT = 9001
ADDR = (HOST, PORT)
BUFFSIZE = 1024
MAX_LISTEN = 5


def tcpServer():
    # TCP服务
    # with socket.socket() as s:
    with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
        # 绑定服务器地址和端口
        s.bind(ADDR)
        # 启动服务监听
        s.listen(MAX_LISTEN)
        print('等待用户接入。。。。。。。。。。。。')
        while True:
            # 等待客户端连接请求,获取connSock
            conn, addr = s.accept()
            print('警告,远端客户:{} 接入系统!!!'.format(addr))
            with conn:
                while True:
                    print('接收请求信息。。。。。')
                    # 接收请求信息
                    data = conn.recv(BUFFSIZE)
                    print('data=%s' % data)
                    print('接收数据:{!r}'.format(data.decode('utf-8')))

                    # 发送请求数据
                    conn.send(data.encode('utf-8'))
                    print('发送返回完毕!!!')
            s.close()


# 创建UDP服务
def udpServer():
    # 创建UPD服务端套接字
    with socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as s:
        # 绑定地址和端口
        s.bind(ADDR)
        # 等待接收信息
        while True:
            print('UDP服务启动,准备接收数据。。。')
            # 接收数据和客户端请求地址
            data, address = s.recvfrom(BUFFSIZE)

            if not data:
                break

            print('接收请求信息:{}'.format(data.decode('utf-8')))

            s.sendto(b'i am udp,i got it', address)

        s.close()

if __name__ == '__main__':

    while True:
        choice = input('input choice t-tcp or u-udp:')

        if choice != 't' and choice != 'u':
            print('please input t or u,ok?')
            continue

        if choice == 't':
            print('execute tcpsever')
            tcpServer()
        else:
            print('execute udpsever')
            udpServer()

client.py代码

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:702813599
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
import socket

from time import ctime
HOST = 'localhost'
PORT = 9001
ADDR = (HOST, PORT)
ENCODING = 'utf-8'
BUFFSIZE = 1024


def tcpClient():
    # 创建客户套接字
    with socket.socket(family=socket.AF_INET, type=socket.SOCK_STREAM) as s:
        # 尝试连接服务器
        s.connect(ADDR)
        print('连接服务成功!!')
        # 通信循环
        while True:
            inData = input('pleace input something:')
            if inData == 'q':
                break
            # 发送数据到服务器
            inData = '[{}]:{}'.format(ctime(), inData)

            s.send(inData.encode(ENCODING))
            print('发送成功!')

            # 接收返回数据
            outData = s.recv(BUFFSIZE)
            print('返回数据信息:{!r}'.format(outData))

        # 关闭客户端套接字
        s.close()


def udpClient():
    # 创建客户端套接字
    with socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as s:
        while True:
            # 发送信息到服务器
            data = input('please input message to server or input \'quit\':')
            if data == 'quit':
                break
            data = '[{}]:{}'.format(ctime(), data)

            s.sendto(data.encode('utf-8'), ADDR)

            print('send success')

            # 接收服务端返回信息
            recvData, addrs = s.recvfrom(BUFFSIZE)

            print('recv message : {}'.format(recvData.decode('utf-8')))

        # 关闭套接字
        s.close()


if __name__ == '__main__':

    while True:
        choice = input('input choice t-tcp or u-udp or q-quit:')
        if choice == 'q':
            break
        if choice != 't' and choice != 'u':
            print('please input t or u,ok?')
            continue

        if choice == 't':
            print('execute tcpsever')
            tcpClient()
        else:
            print('execute udpsever')
            udpClient()

代码说明:先执行 python server.py,在执行python client.py,就可以测试TPC/UDP简单的通信了。

尾语

感谢你观看我的文章呐~本次航班到这里就结束啦 🛬

希望本篇文章有对你带来帮助 🎉,有学习到一点知识~

躲起来的星星🍥也在努力发光,你也要努力加油(让我们一起努力叭)。

python socket,python,python,php,开发语言,pycharm

最后,宣传一下呀~👇👇👇更多源码、资料、素材、解答、交流皆点击下方名片获取呀👇👇文章来源地址https://www.toymoban.com/news/detail-761908.html

到了这里,关于Python socket详解,全网最全教程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 用 Pyinstaller 模块将 Python 程序打包成 exe 文件(全网最全面最详细,万字详述)

    目录 一、打包前置知识 1.1 什么是 exe 可执行文件? 1.2 为什么要将 Python 程序打包为 exe 可执行文件? 1.3 为什么 Python 程序不能直接运行呢? 1.4 我们用什么来打包 Python 文件呢?  1.5 打包有哪几种分类呢? 二、打包的方法 2.1 简单打包 2.1.1 前置 2.1.2 直接打包 2.1.3 稍微“加

    2024年02月04日
    浏览(60)
  • 三次握手详解,全网最全

    在介绍三次握手和四次挥手之前,先来简单认识一下 TCP 报文段的结构   TCP报文段也分为首部和数据两部分,首部默认情况下一般是20字节长度,但在一些需求情况下,会使用“可选字段”,这时,首部长度会有所增加,但最长不超过60字节。 TCP 首部包含以下内容,请留意其

    2023年04月26日
    浏览(42)
  • 全网最全c++中的system详解

    这篇文章是二发,做了些微调,感兴趣的朋友可以看原文:C++中的system_一只32汪的博客-CSDN博客 1,简介         system()函数是在C++制作中十分常用,有用的一个函数。         其效果类似于系统中\\\"cmd\\\"控制台和\\\"bat\\\"文件。         通常会在C++字符游戏,和C++整蛊程序中使

    2024年02月05日
    浏览(41)
  • eureka自我保护模式详解(全网最全)

            当微服务客户端启动后,会把自身信息注册到Eureka注册中心,以供其他微服务进行调用。一般情况下,当某个服务不可用时(一段时间内没有检测到心跳或者连接超时等),那么Eureka注册中心就会将该服务从可用服务列表中剔除,但是在微服务架构中,因为服务数

    2024年02月16日
    浏览(39)
  • MySQL安装(全网最全最详细教程)

    目录 1 MySQL的卸载 1.1 停止MySQL服务 1.2 软件的卸载 2 MySQL的下载、安装、配置 2.1 MySQL的4大版本  2.2 软件的下载 2.3 软件的安装 ​2.4 软件的配置 3 多版本mysql同时安装 4 安装过程中可能会出现的问题      有些人希望卸载老版本的MySQL,安装新版本的MySQL,所以在讲如何安装之

    2024年02月09日
    浏览(60)
  • 全网最全的 postman 工具使用教程

    postman是一款支持http协议的接口调试与测试工具,其主要特点就是功能强大,使用简单且易用性好 。 无论是开发人员进行接口调试,还是测试人员做接口测试,postman都是我们的首选工具之一 。 那么接下来就介绍下postman到底有哪些功能,它们分别都能干些什么 。下面先通过

    2024年03月21日
    浏览(42)
  • c++详解递归算法-全网最全+例题讲解

    什么是递归? 递归的思想是什么? 什么时候该用递归? 使用递归需要注意哪些问题? 递归思想解决经典问题 递归和循环的区别是什么? 递归算法: 定义:直接或间接地出现对自身的调用 本质:递归即 递进 与 回归, 基本思想就是把规模大的问题转化为规模小的相似的子

    2024年02月07日
    浏览(38)
  • node npm 下载,安装,使用 全网最全教程

    node npm 下载,安装,使用 全网最全教程 1.前段时间 使用到vue的时候 需要下载node.js 废话不多说看步骤, 到node.js官网下载 最新的下载地址:[https://nodejs.org/en/download/] 个人建议安装在d盘好点 ![在这里插入图片描述] 最后完成安装 Node.js已经安装完成,可以先进行下简单的测试

    2023年04月15日
    浏览(53)
  • 将网页数据读入数据库+将数据库数据读出到网页——基于python flask实现网页与数据库的交互连接【全网最全】

    【全网最全!保姆级教学!!】 本篇博客基于flask技术,实现数据库和网页端的交互。 实现效果:在网页端输入数据,能够将数据存入数据库。反向操作时,能将数据库的数据取出,显示在网页端。不仅如此,还支持数据的查询和修改。  读取网页数据存入数据库,效果如下

    2024年02月13日
    浏览(47)
  • 全网最全Android compose开发应用指南

    Jetpack Compose 是一款基于Kotlin API,重新定义Android布局的一套框架。它可简化并加快 Android 上的界面开发。使用更少的代码、强大的工具和直观的 Kotlin API,快速让应用生动而精彩。对于开发者而言最直观的就是 节省开发时长,减少包体积,提高应用性能 。 如果你是新项目 。

    2023年04月10日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包