网络编程:socket通信有时出现代码功能实现成功,之后失败,过会儿又成功的情况解决

时间:2021-04-17
本文章向大家介绍网络编程:socket通信有时出现代码功能实现成功,之后失败,过会儿又成功的情况解决,主要包括网络编程:socket通信有时出现代码功能实现成功,之后失败,过会儿又成功的情况解决使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

网络编程:socket通信有时出现代码功能实现成功,之后失败,过会儿又成功的情况解决

导语:在我学习网络编程,socket通信的时候,Linux端有时明明已经用代码实现了功能,并且运行成功,但是第二次运行时,代码就无法实现功能了,等上一段时间,代码又行了。我想了很久最终想起了自己从未关注过的端口问题(我在写代码时直接定义了端口,而非在命令行输入),于是我尝试每运行一次,就重新定义端口,很显然问题解决了。这回问题算是找到了——端口被占用了。什么?被占用了?难道关闭套接字后,进程没有自动退出?于是,我又开始了探索。

1.Linux终端根据端口port查进程(我查看了进程,果然端口被占用了)

netstat -nap | grep port

lsof  -i:port

2. 当服务器监听并接受一个客户端链接的时候, 可以不断向客户端发送数据, 这时如果客户端断开socket链接, 服务器继续向一个关闭的socket 发送数据(send, write)的时候, 系统会默认对服务器进程发送一个SIGPIPE信号, 这个信号的默认动作就是终止当前服务器进程。

3.解决办法:我一开始想要在关闭套接字之后杀掉这个端口的进程,后来发现这样极其容易误伤,所以我转向于允许套接口和一个已在使用中的地址捆绑。

int opt = 1;
setsockopt(serv_sock,SOL_SOCKET,SO_REUSEADDR,&opt,sizeof( opt ));/*Socket 端口被占用解决方法,将套接字属性设置为 SO_REUSEADDR (允许套接口和一个已在使用中的地址捆绑),serv_sock换成自己创建的套接字*/

原文地址:https://www.cnblogs.com/wsgxg/p/14670930.html