Python语言提供了Socket套接字来实现网络通信,Python的应用程序通常通过Socket"套接字"向网络发出请求或者应答网络请求,使主机间或者一台计算机上的进程间可以通讯!

网络:就是指将具有独立功能的多台计算机通过通信线路连接起来,在网络管理软件及网络通信协议下,实现资源共享和信息传递的虚拟平台。通俗理解网络就是把双方或者多方设备连接起来的一个工具,然后可以进行数据传递。

网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket,socket本质是编程接口(API),对TCP/IP的封装,TCP/IP也要提供可供程序员做网络开发所用的接口,这就是Socket编程接口;HTTP是轿车,提供了封装或者显示数据的具体形式;Socket是发动机,提供了网络通信的能力。

TCP协议:

  1. TCP协议是在通信的两台设备之间建立连接通道,对传输的数据大小没有限制,但是因为建立了连接,相对可靠一些,但是速度会慢一些。TCP协议又称为三次握手–四次挥手协议,因为建立过程有三步(发送请求、获取反馈、建立连接)。通常情况下,我们的蓝牙通信、打电话都是使用的 TCP 协议。
  2. TCP:英文全拼(Transmission Control Protocol)简称传输控制协议,它是一种面向连接的、可靠的、基于字节流的传输层通信协议(在通信传输之前,先打开一个连接。连接被关闭时无法发送数据。)
TCP特点:
1. 面向连接
通信双方必须先建立连接才能进行数据的传输,双方都必须为该连接分配必要的系统内核资源,以管理连接的状态和连接上的传输。双方间的数据传输都可以通过这一个连接进行。完成数据交换后,双方必须断开此连接,以释放系统资源。这种连接是一对一的,因此TCP不适用于广播的应用程序,基于广播的应用程序请使用UDP协议。2. 可靠传输2.1 TCP采用发送应答机制TCP发送的每个报文段都必须得到接收方的应答才认为这个TCP报文段传输成功2.2 超时重传发送端发出一个报文段之后就启动定时器,如果在定时时间内没有收到应答就重新发送这个报文段。TCP为了保证不发生丢包,就给每个包一个序号,同时序号也保证了传送到接收端实体的包的按序接收。然后接收端实体对已成功收到的包发回一个相应的确认(ACK);如果发送端实体在合理的往返时延(RTT)内未收到确认,那么对应的数据包就被假设为已丢失将会被进行重传。2.3 错误校验由发送端计算,然后由接收端验证,其目的是为了检测数据在发送端到接收端之间是否有改动,如果接收方检测到校验和有差错,则直接丢弃这个数据包。2.4 流量控制和阻塞管理流量控制用来避免主机发送得过快而使接收方来不及完全收下。TCP的优缺点:
①优点:
可靠,稳定
适合传输大量数据②缺点:
传输速度慢
占用系统资源高

UPD协议:

  1. UDP协议需要将数据打包,因为包有大小,所以对数据大小是有限制的,UDP是不用建立连接的,但不保证待接收方一定会接收到消息,所以不可靠。但是,因为不用建立连接,因此速度要快一些。通常情况下,我们发送短信都是使用的UDP 协议。
  2. UDP:英文全拼(User Datagram Protocol)简称用户数据报协议,它是无连接的、不可靠的网络传输协议(无需确认对端是否存在,发送端可随时发送数据。)
UDP特点:
因为udp发送数据之前不需要建立连接所有具有以下特点:
1.无连接
2.资源开销小
3.传输速度快
4.udp每个数据包最大是64KUDP的优缺点:
①优点:
传输速度快
不需要连接,资源开销小②缺点:
传输数据不可靠,容易丢数据包
没有流量控制,当对方没有及时接收数据,发送方一直发送数据会导致缓冲区数据满了,电脑出现卡死情况,所有接收方需要及时接收数据。

TCP和UDP区别:

TCP面向连接; UDP是不面向连接;
TCP提供可靠的数据传输,也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP不保证可靠的数据传输,容易出现丢包情况;
TCP需要连接传输速度慢,UDP不需要连接传输速度快
TCP不支持发广播;UDP支持发广播
TCP对系统资源要求较多,UDP对系统资源要求较少。
TCP适合发送大量数据,UDP适合发送少量数据
TCP有流量控制,UDP没有流量控制

**

TCP服务器客户端—>源代码

**

TCP_Server服务器:
# -*- coding: utf-8 -*-
# @Time     : 2022/12/5 17:56
# @Author   : 微酷
# @Email    : 110169011@qq.com
# @Filename : TCP_Server服务器.py
# @Software : PyCharmPro2021.3; Anaconda(Python3.10)# 使用python中的网络编程
import socket
import time# 创建一个tcp/ip协议的套接字
tcpSocket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)# 创建一个udp/ip的套接字
# udpSocket=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)#IP/端口号
host = "localhost"
port = 8888
Address = (host,port)# 开始绑定地址
tcpSocket.bind(Address)
tcpSocket.listen(5)while True:print("-"*15,"服务器等待被连接","-"*15)client_sock,client_add = tcpSocket.accept()print("已连接到客户端,地址为:{0}".format(client_add))try:print("*"*20,"正在等待接收数据ing","*"*20)while True:#接收客户端向服务器发送的数据Client_databack = client_sock.recv(1024)print("接收到的客户端发送数据内容为:{0}".format(str(Client_databack,encoding="UTF-8")))if Client_databack.upper() == "EXIT":break# # 获取电脑当前时间,带日期的24小时格式    %I:12小时制   %H:24小时制Now_time = time.strftime("%Y/%m/%d %H:%M:%S",time.localtime())# 服务器向客户端的响应数据#client_sock.send(bytes(data.encode("UTF-8")))client_sock.send(bytes("时间 = {0},数据 = {1}".format(Now_time, str(Client_databack, encoding="UTF-8")), encoding="UTF-8"))Server_data = input("My[服务器]=====>请输入发送到客户端的消息  :")client_sock.send(Server_data.encode("UTF-8"))#接收客户端向服务器发送的数据Server_databack = client_sock.recv(1024).decode("UTF-8")print("接收到的客户端发送数据内容为:%s" % Server_databack)except Exception as abc:print(abc)finally:client_sock.close()
TCP_Client客户端
# -*- coding: utf-8 -*-
# @Time     : 2022/12/5 17:45
# @Author   : 微酷
# @Email    : 110169011@qq.com
# @Filename : TCP_Client客户端.py
# @Software : PyCharmPro2021.3; Anaconda(Python3.10)# 使用python中的网络编程
import socket
import time# 创建一个tcp/ip协议的套接字
clientSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 创建一个udp/ip的套接字
# udpSocket=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)#IP/端口号
host = "localhost
port = 8888
Address = (host, port)# 开始连接服务器地址
clientSocket.connect(Address)if clientSocket is None:print("Sorry,无法未连接到服务器.....NO")else:print("Successful,已经连接到服务器-----OK")while True:Client_data = input("My[客户端]=====>请输入发送到服务器的消息(exit/quit退出)  :")#time.sleep(0.5)if Client_data.lower() =="exit" or Client_data.lower() =="quit":#bytes 字节串clientSocket.send(bytes("EXIT".encode("UTF-8")))#关闭当前客户端print("我断开连接了...")clientSocket.close()breakclientSocket.send(bytes(Client_data.encode("UTF-8")))#接收服务器向客户端发送的数据Client_data_finally = clientSocket.recv(1024).decode("UTF-8")print("【系统反馈】已收到数据内容为:%s"%Client_data_finally)#print("收到的客户端数据内容为:{0}".format(str(data_finally)))

UDP服务器客户端—>源代码

UDP_Server服务器:
# -*- coding: utf-8 -*-
# @Time     : 2022/12/5 18:10
# @Author   : 微酷
# @Email    : 110169011@qq.com
# @Filename : UDP_Server服务器.py
# @Software : PyCharmPro2021.3; Anaconda(Python3.10)import socketHOST = ''
PORT = 10888
s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
s.bind((HOST, PORT))
data = True
while data:data,address = s.recvfrom(2048)if data == b'bye':breakprint('Received String:',data.decode('utf-8'))s.sendto(data,address)
s.close()
UDP_Client客户端:
# -*- coding: utf-8 -*-
# @Time     : 2022/12/5 18:18
# @Author   : 微酷
# @Email    : 110169011@qq.com
# @Filename : UDP_Client客户端.py
# @Software : PyCharmPro2021.3; Anaconda(Python3.10)import socketHOST = 'localhost'
PORT = 10888
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
data = '你好!'
while data:s.sendto(data.encode('utf-8'),(HOST,PORT))if data == 'bye':breakdata, addr = s.recvfrom(512)print('Recv from server:\n',data.decode('utf-8'))data = input('Please input a info:\n')
s.close()

这两份TCP与UDP源代码就可以进行简单的通讯,如有问题,请联系本人!

Python Socket通讯相关推荐

  1. python socket多线程 获取朋友列表_python socket多线程通讯实例分析(聊天室)

    本文实例讲述了python socket多线程通讯方法.分享给大家供大家参考,具体如下: #!/usr/bin/evn python """ 这是一个Socket+多进程 ...

  2. UR机器人与电脑进行socket通讯(python / C++)

    socket介绍 在计算机通信领域,socket 被翻译为"套接字",它是计算机之间进行通信的一种约定或一种方式.通过 socket 这种约定,一台计算机可以接收其他计算机的数据, ...

  3. python socket 与unity通讯来调用photoshop批量处理

    python socket 与unity通讯,通过unity发送消息来调用photoshop批量处理,photoshop批量处理完成完成后在发送complete完成通知给Unity python部分代 ...

  4. python udp 直播_[Python] socket发送UDP广播实现聊天室功能

    原博文 2018-11-24 12:33 − 一.说明 本文主要使用socket.socket发送UDP广播来实现聊天室功能. 重点难点:理解UDP通讯流程.多线程.UDP广播收发等. 测试环境:Wi ...

  5. Java与C++Socket通讯注意

    2019独角兽企业重金招聘Python工程师标准>>> c++与java进行socket通信时注意事项 因为java发送的都是网络字节序(big-endium),而c++是主机字节序 ...

  6. python socket编程_Python Socket编程实现网络编程

    对于有经验的开发人员来说,掌握的编程语言应该是不少的.在这些编程语言中,网络编程的应用时必不可少的.其中Python也是这样的编程语言.我们今天将会在这里为大家详细介绍一下Python Socket编 ...

  7. 基于TCP的Socket通讯

    基于 TCP 的 Socket 通讯 最近要实现两个机器之间基于 TCP 的 socket 通讯(个人使用 Python 实现),尝试了官方的 demo 代码后总是被拒绝连接,仔细研究了一下并成功建立 ...

  8. python socket编程_Python学习记录-socket编程

    1. OSI七层模型详解 2. Python socket 什么是 Socket? Socket又称"套接字",应用程序通常通过"套接字"向网络发出请求或者应答 ...

  9. Python Socket联机自动匹配双人五子棋(含登录注册系统与界面,数据库连接,可作结课作业,可用于学习)

    1.前言 首先,关于源码的获取,本人提供了三种方式: 直接从文章里面Ctrl+C,Ctrl+V,然后按照我已给的文件结构搞一下即可: 通过积分下载上传到CSDN的资源: 点开本人的主页,点击" ...

最新文章

  1. Blender终极角色创造:从初学者到专业人士
  2. 【二级java】模拟题知识点总结
  3. Paper Review: Bayesian Regularization and Prediction
  4. solrcloud replica collection core shard slice 概念讲解
  5. 判断是否是数组的方法
  6. 查询速度提升200倍,ClickHouse到底有多快?
  7. java split()方法_Java编程性能优化一些事儿
  8. .NET Core中使用Razor模板引擎
  9. Docker 入门(1)虚拟化和容器
  10. 学成在线--19.新增课程(数据字典)
  11. 崭新的2020(洛谷P5886题题解,Java语言描述)
  12. 活动选择(信息学奥赛一本通-T1323)
  13. jquery基本选择器:id选择器、class选择器、标签选择器、通配符选择器
  14. zyplayer-doc 1.0.1 发布,你家所需的文档管理工具他都承包了!
  15. Solr服务器搭建与简单使用
  16. 刷屏的北京雾霾,2018 年北上广深空气质量分析
  17. 研究生生存指南之论文
  18. Lucas-Kanade 20 Years On 正反向/累加/合成求解算法
  19. excel 职位分析
  20. 稀释消费次元壁,华为的移动生活新范式

热门文章

  1. xgp游戏列表_XGP新增13款游戏:《生化危机7》、《废土3》在列
  2. 项目中的里程碑怎么定?
  3. 影像分辨率、地面分辨率、比例尺及DPI之间的关系
  4. Python——十进制转十六进制
  5. Qt下实现XML、INI、JSON的文件读写示例开发
  6. 设计模式之禅《一》 大旗不挥,谁敢冲锋 ——6大设计原则
  7. Decompiled .class file下载sourse失败
  8. 《论文阅读》Are Emojis Predictable?
  9. Appium连接真机(有线连接)
  10. Spring IOC容器学习总结