文章目录

  • 基于tcp的套接字
    • 实现目标
    • tcp服务端源码
    • tcp客户端源码
    • tcp效果实现
  • 基于udp的套接字
    • udp作用介绍
    • udp服务端源码
    • udp客户端源码
    • udp效果实现
    • 用udp实现一个时间接收器

本篇文章继续研究Socket编程,上篇文章:Python之网络编程(socket基础)已经详细介绍过Socket编程的基础知识,其中也包括了tcp协议的工作流程。本篇就通过小案例继续分析tcp与udp的用法及功能

基于tcp的套接字

实现目标

(1)循环多链接并且循环收发消息
(2)可服务多个客户端,并且不断与客户端收发消息(但不可同时服务多个客户端,下文中的udp协议可以做到同时服务多个客户端)

tcp服务端源码
from socket import *ip_port = ('192.168.43.247',8080)  #记录ip地址
back_log = 5
buffer_size = 1024tcp_server = socket(AF_INET,SOCK_STREAM)#规定服务端可以重新使用ip地址
tcp_server.setsockopt(SOL_SOCKET,SO_REUSEADDR,1)tcp_server.bind(ip_port)  #绑定IP地址
tcp_server.listen(back_log)  #监听信号#实现循环接收多链接,同时服务多个客户端
while True:#该语句用来表明状态print('================服务端开始运行了================')conn,addr = tcp_server.accept()  #接收对方的链接和地址print('双向链接是:',conn)print('客户端地址是:',addr)#实现循环收发消息while True:try:  #用异常处理来解决当服务端断开以后,跳出上一个链接的循环data = conn.recv(buffer_size)  #buffer_size默认参数,接收消息print('客户端发来的消息是:',data.decode('utf-8'))  #接收到的消息要解码conn.send(data.upper())  #把收到的消息变成大写except Exception :breakconn.close()  #循环一个链接后就关闭这个链接tcp_server.close()  #关闭socket对象
tcp客户端源码
from socket import *ip_port = ('192.168.43.247',8080)  #记录ip地址
back_log = 5
buffer_size = 1024tcp_client = socket(AF_INET,SOCK_STREAM)
tcp_client.connect(ip_port)#实现循环发收消息
while True:msg = input('请输入>>>').strip()  #去除输入中的空格if not msg:continue  #如果为空字符(没有输入),就重新输入tcp_client.send(msg.encode('utf-8'))  #发消息print('客户端已发送出消息!')  #接收到的消息要解码#接收消息data = tcp_client.recv(buffer_size)  #buffer_size=1024默认参数,表示字节格式print('服务端发回的消息是:',data.decode('utf-8'))tcp_client.close()  #关闭socket对象
tcp效果实现

tcp服务端:

tcp客户端:

基于udp的套接字

udp作用介绍

(1)udp是一种没有链接的套接字,腾讯QQ就是根据udp协议通信的。

(2)为何udp套接字的服务端不需要获取对方的链接?
====>因为客户端每次发消息时都会指定发给哪个服务端

(3)recv与recvfrom的区别
recv在自己这端的缓冲区为空时,会阻断
recvfrom在自己这端的缓冲区为空时,就收一个空

(4)udp服务端的并行不冲突
udp服务端可以直接与多个客户端建立通信,不会冲突;
而tcp服务端不能直接实现并发的效果,需要特殊处理,否则只能同时服务一个客户端
原因: udp不需要建立链接,客户端每次收发都是指定好了发给哪个服务端的地址

udp服务端源码
from socket import *ip_port = ('192.168.43.247',8080)
buffer_size = 1024  #表示字节形式udp_server = socket(AF_INET,SOCK_DGRAM)  #SOCK_DGRAM是数据报套接字,即udp套接字
udp_server.bind(ip_port)#因为不需要链接,所以可以直接进入循环
while True:#接收消息data,addr = udp_server.recvfrom(buffer_size)  #把内容赋给data,地址和端口赋给addrprint('从客户端收到的消息是:',data)#data = udp_server.recvfrom(buffer_size)#这样的data是一个元组,里面包括了,内容,服务端的ip地址,服务端的端口#服务端发回客户端消息udp_server.sendto(data.upper(),addr)  #addr是对方的地址和端口
udp客户端源码
from socket import *ip_port = ('192.168.43.247',8080)
buffer_size = 1024  #表示字节形式udp_client = socket(AF_INET,SOCK_DGRAM)  #SOCK_DGRAM是数据报套接字,即udp套接字#开始循环收发消息
while True:msg = input('请输入>>>')  #指定输入消息udp_client.sendto(msg.encode('utf-8'),ip_port)#udp套接字需要用sendto发消息,第一个参数是消息内容,第二个参数是服务端的ip地址#这样就可以让客户端每次都发给指定的服务端,而服务端不需要获取客户端的链接#客户端接收消息data,addr = udp_client.recvfrom(buffer_size)  #以字节形式接收消息#因为收到的是一个元组,所以把内容赋给data,地址赋给addrprint(data.decode('utf-8'))  #解码并输出消息
udp效果实现

客户端:

客户端并发:

用udp实现一个时间接收器

每发送一次请求就返回一个时间

原理就是上文的udp服务端与客户端代码,文章里传上了py文件,需要的请自行下载

Python之网络编程(TCP套接字与UDP套接字)相关推荐

  1. python之网络编程 --- TCP编程

    Python的第三方库非常强大,简单易用,简直不要太爽. 首先看一下TCP编程 TCP的服务模型包括面向连接的服务和可靠数据传输服务,首先要进行三次握手,建立全双工连接,连接双方的进程可以在此连接上同 ...

  2. Python网络编程——TCP与UDP

    Python网络编程 TCP(复杂可靠)与UDP(简单不可靠)的区别 1) TCP提供面向连接的传输,通信前要先建立连接(三次握手机制): UDP提供无连接的传输,通信前不需要建立连接. 2) TCP ...

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

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

  4. 【JavaEE】网络编程之TCP套接字、UDP套接字

    目录 1.网络编程的基本概念 1.1为什么需要网络编程 1.2服务端与用户端 1.3网络编程五元组 1.4套接字的概念 2.UDP套接字编程 2.1UDP套接字的特点 2.2UDP套接字API 2.2 ...

  5. 网络编程------IP地址,端口号,套接字,网络字节序

    IP地址         IP地址是IP协议中,用来标识网络中的唯一一台主机的地址.IP协议有两个版本IPv4,IPv6.在IPv4中,IP地址是一个4字节的32位的整数.在IPv6中,IP地址是一个 ...

  6. Python高级网络编程系列之第一篇

    在上一篇中我们简单的说了一下Python中网络编程的基础知识(相关API就不解释了),其中还有什么细节的知识点没有进行说明,如什么是TCP/IP协议有几种状态,什么是TCP三次握手,什么是TCP四次握 ...

  7. Python Socket网络编程(一)初识Socket和Socket初步使用

    目录 前言 网络编程 实质 IP地址和端口 数据传输协议 协议 Socket 概念 套接字 socket对象方法 初步使用 功能 源码 运行结果 结语 前言 本系列博客是笔者学习Python Sock ...

  8. 0x011.Python学习-网络编程、PortScan

    Python3 网络编程 Python 提供了两个级别访问的网络服务.: 低级别的网络服务支持基本的 Socket,它提供了标准的 BSD Sockets API,可以访问底层操作系统Socket接口 ...

  9. java socket ip_JAVA 网络编程 TCP/IP、Socket 和协议设计

    [JAVA 网络编程 TCP/IP.Socket 和协议设计] TCP/IP 协议简介 IP 首先我们看 IP(Internet Protocol)协议.IP 协议提供了主机和主机间的通信. 为了完成 ...

最新文章

  1. python arg, *arg,**kwargs用法区别
  2. 比特币现金(BCH),存在网络上的隐形矿工哈希率分布
  3. 查看真实的执行计划 绑定变量对执行计划的影响--“绑定变量窥探”
  4. 电商平台 高并发 微服务 方案_Java生鲜电商平台-秒杀系统微服务架构设计与源码解析实战...
  5. [Swift]LeetCode1147. 段式回文 | Longest Chunked Palindrome Decomposition
  6. 【LeetCode笔记】剑指Offer 19. 正则表达式匹配(Java、动态规划)
  7. c纳秒级计时器_纳秒级性能计时器
  8. WCF服务重构实录(中)
  9. 运维人员如何学好shell脚本编程
  10. 测试了一下人脸识别,远远达不到吾之要求
  11. c#里listview里如何获取点击的是哪一列
  12. 华为手机解锁码快速申请方式
  13. 搜狗浏览器安装插件(.crx)
  14. 《畅玩NAS》家庭 NAS 服务器搭建方案
  15. Kafka创建topic报错:Error: Exception thrown by the agent : java.rmi.server.ExportException: Port already
  16. MEMS传感器领域关于薄膜性能的中国国家标准,“带状薄膜抗拉性能的试验方法”由北京智芯传感等单位发布并实施
  17. 尝试从redis未授权访问到getshell的四种姿势(失败)
  18. 锁客+裂变,这套玩法你觉得怎么样
  19. 计算机专业英语四个部分思维导图,一张思维导图,彻底分清英语五大基本句型...
  20. 计算机图形学 学习笔记(七):二维图形变换:平移,比例,旋转,坐标变换等

热门文章

  1. Mysql drop table 原理_mysql事务的实现原理
  2. 微信找不到nfc功能_手机的NFC如何使用?3分钟教会你!
  3. oracle恢复drop建的表首次,Oracle中Drop,Delete,Truancate表恢复
  4. 芜湖计算机专业哪个学校最好,芜湖IT行业那么火,到底哪些人适合学IT呢?
  5. java 拦截html请求参数值_javaweb项目,html文件放在了WebRoot下,如何拦截访问html的请求呀?...
  6. c++fabs函数_C语言中常用的标准库函数有哪些?
  7. java thread 输出结果_大神来看看这段程序输出结果是什么?
  8. HTML中轮播图里的圆点不充满,老师好,轮播图中的小点不显示
  9. java掠夺_Editing Java版指南/村庄与掠夺 (section)
  10. python更改整列小时分钟_利用python对excel中一列的时间数据更改格式操作