TCP通信之经典问题解决

news/2024/9/20 3:00:58/文章来源:https://www.cnblogs.com/kkbest/p/18372216

先看下面的代码,研究下执行后会出现什么?

服务端:
from socket import *
ip_port=('127.0.0.1',8003)
buffer_size=1024sock_server=socket(AF_INET,SOCK_STREAM)
sock_server.bind(ip_port)
sock_server.listen(5)while True:print('服务端建立连接...')conn,addr=sock_server.accept()while True:data=conn.recv(1024)print('服务端输出结果:',data)conn.send(data.upper())
conn.close()
sock_server.close()客户端:
from socket import *
ip_port=('127.0.0.1',8002)
buffer_size=1024sock_client=socket(AF_INET,SOCK_STREAM)
sock_client.connect(ip_port)while True:cmd=input('输入命令:')if not cmd:continueif cmd == 'quit':breaksock_client.send(cmd.encode('utf-8'))data=sock_client.recv(1024).decode('utf-8')print(data)

输出报错结果解析:
1> 客户端输入quit,服务端报错如下:

服务端此时会循环报这个错,客户端不用改,服务端改写方法:

from socket import *
ip_port=('127.0.0.1',8003)
buffer_size=1024sock_server=socket(AF_INET,SOCK_STREAM)
sock_server.bind(ip_port)
sock_server.listen(5)while True:print('服务端建立连接...')conn,addr=sock_server.accept()while True:data=conn.recv(1024)if not data: breakprint('服务端输出结果:',data)conn.send(data.upper())
conn.close()
sock_server.close()

2> 上面客户端输入quit正常退出后服务端报错的问题解决了,但是还有种情况,比如客户端突然意外中断了而不是正常退出,服务端报错如下:

服务端代码改写如下:
from socket import *
ip_port=('127.0.0.1',8003)
buffer_size=1024sock_server=socket(AF_INET,SOCK_STREAM)
sock_server.bind(ip_port)
sock_server.listen(5)while True:print('服务端建立连接...')conn,addr=sock_server.accept()while True:try:data=conn.recv(1024)if not data: breakprint('服务端输出结果:',data)conn.send(data.upper())except Exception as e:break
conn.close()
sock_server.close()

至此为止,问题解决了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/784941.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

看看人家那后端 API 接口写的,那叫一个优雅!

文章来源:https://www.toutiao.com/article/6694404645827117572 在移动互联网,分布式、微服务盛行的今天,现在项目绝大部分都采用的微服务框架,前后端分离方式,(题外话:前后端的工作职责越来越明确,现在的前端都称之为大前端,技术栈以及生态圈都已经非常成熟;以前后…

用一段时间后 QT creator 打开容易卡死

以下为Win11环境 1.win+E打开文件夹,显示隐藏项目 2.找到如下路径的 C:\Users\你的电脑名\AppData\Roaming\QtProject 删除其中文件 3.纵享丝滑

MongoDB系列之一文总结索引

概述 分类 索引的分类:按照索引包含的字段数量,可分为单键索引(单字段索引)和组合索引(联合索引、复合索引) 按照索引字段的类型,可以分为主键索引和非主键索引 按照索引节点与物理记录的对应方式来分,可以分为聚簇索引和非聚簇索引,其中聚簇索引是指索引节点上直接包…

MongoDB系列之WiredTiger引擎

概述 关系型数据库MySQL有InnoDB存储引擎,存储引擎很大程度上决定着数据库的性能。 在MongoDB早期版本中,默认使用MMapV1存储引擎,其索引就是一个B-树(也称B树)。 从MongoDB 3.0开始引入WiredTiger(以下简称WT)存储引擎,在性能及稳定性上都有明显的提升。从MongoDB 3.2…

短视频生成与AI的结合应用,Web/App RPA 智能化应用

在这个日新月异的时代,人工智能(AI)与自动化技术的融合正以前所未有的速度重塑着各行各业。你是否梦想过,在信息的海洋中自动筛选出精华,用创意点亮每一篇内容,同时让繁琐的工作流程变得轻松高效?我们诚邀您参加即将开启的“AI自动化应用开发”公开课第3期,一同探索如何…

go项目debug配置

调试需要配置: 在makefile中 则对应配置:

中国每个软件创业者都是这个时代的“黑悟空”

作者 | 白鲸开源CEO 郭炜 我作为一个具有30+游龄而20年+都不碰游戏的游戏玩家,最近为了《黑神话:悟空》(简称,黑悟空),不但花重金更新了显卡,还第一次下载了Steam并绑定了支付,为的就是支持这个第一次走出国门的3A游戏大作。 因为,我在《黑悟空》3A作品诞生的经历里,看…

2024-08-21:用go语言,给定一个从 0 开始索引的整数数组 nums 和一个整数 k,请设计一个算法来使得数组中的所有元素都大于或等于 k,返回所需的最少操作次数。 每次操作可以执行以下步骤

2024-08-21:用go语言,给定一个从 0 开始索引的整数数组 nums 和一个整数 k,请设计一个算法来使得数组中的所有元素都大于或等于 k,返回所需的最少操作次数。 每次操作可以执行以下步骤: 1.选择数组中最小的两个整数 x 和 y。 2.从数组中删除 x 和 y。 3.计算 min(x, y) * …

跨域、JSONP、CORS、Spring、Spring Security解决方案

概述 JavaScript出于安全方面的考虑,不允许跨域调用其他页面的对象。跨域是浏览器(如Chrome浏览器基于JS V8引擎,可以简单理解为JS解释器)的一种同源安全策略,是浏览器单方面限制脚本的跨域访问。因此,仅有客户端运行在浏览器时才存在跨域问题,才需要考虑如何解决这个问…

使用Kiota工具生成WebApi的代理类,以及接口调用的简单体验

前言 当前.NET环境下,生成WebApi代理类的工具已经有很多选择了,比如OpenApi Generator,NSwag和Refitter等,不同的工具生成的代码风格以及实现方式略有不同,比如Refitter生成的客户端是Refit风格. 本人比较喜欢Refit风格的标注风格因此还是比较喜欢使用Refitter的,TA生成的代码风…

039、Vue3+TypeScript基础,路由中使用redirect来重定向

01、index.ts代码如下://创建路由并暴露出去 import {createRouter, createWebHistory} from vue-router import Home from @/view/Home.vue import About from @/view/About.vue import News from @/view/News.vue import Detail from @/view/Detail.vueconst router = creat…

传习录

《传习录》 王阳明此心光明,亦复何言。 ◆ 徐爱录 2023/09/07发表想法 至善是心的本体,是内在的,只要我们把‘明明德’的工夫,做到“惟精、惟一”的程度就是至善。 大学之道,在明明德,在亲民,在止于至善。知止而后有定,定而后能静,静而后能安,安而后能虑,虑而后能得…