网络编程学习(2)—— 基于SOCKET简单套接字通信的 bug 修复

在学习网络编程过程中,遇到了客户端向服务端发送消息时地址已被使用以及发送空消息导致死循环的问题。通过在服务端配置重用IP和端口解决地址使用问题,并在客户端和服务端增加消息非空判断,避免了程序卡死。经过优化的代码使得服务端和客户端能够正常通信,但在Windows下遇到未知循环问题,已采用Linux系统解决方案暂时修复。
摘要由CSDN通过智能技术生成

目前实现的添加了通信循环的套接字通信的一些问题

客户端向服务端发送消息时发现地址已被使用

在我们重启服务端时,可能会遇到这样的问题
在这里插入图片描述
当我们遇到这个问题时,可以在编写服务端代码时加入 一条 socket 配置,重新使用 IP 和 端口。

phone=socket(AF_INET,SOCK_STREAM)
phone.setsockopt(SOL_SOCKET,SO_REUSEADDR,1) #在bind前加
phone.bind(('127.0.0.1',8080))

发空消息时程序进入死循环

除了地址已被使用的错误,我们发现当客户端发送消息时直接发送,即什么都不输入就敲回车,会导致服务端和客户端直接卡在循环中,即只能看到光标在闪动。如下图:
请添加图片描述
请添加图片描述
考虑到是发送了空信息,即" "的消息,所以我们想到的第一个解决方案是在客户端输入要发送的消息时判断发送的消息是否为空。即:

if not data:
	continue

这里要注意的,除了客户端需要判断消息是否为空,服务端也是要判断消息是否为空,否则在运行时我们就会看到这样的运行结果:
请添加图片描述
所以我们对于服务端的优化代码如下:

while True: # 通信循环
    try
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值