网络编程: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
- HDUOJ------(1230)火星A+B
- nyoj-----前缀式计算
- HDUOJ----(4788)Hard Disk Drive
- NYOJ-------笨蛋难题四
- Win平台Web访问白名单设置脚本(IP安全性原则)
- NYOJ-------表达式求值
- HDUOJ----1181 变形课
- 正确的Win主机网站伪静态设置方法
- HDUOJ----(1084)What Is Your Grade?
- HDUOJ------(1272)小希的迷宫
- HDUOJ ---1269迷宫城堡
- HDUOJ---1213How Many Tables
- hduoj----(1033)Edge
- HDUOJ----(1031)Design T-Shirt
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 【FreeRTos】队列管理1
- 【FreeRTOS】队列管理2
- ubuntu——Zbar 在linux/ubuntu下的安装编译
- ZBAR库
- 英文文本关系抽取(fine-tune Huggingface XLNet)
- Laravel 7.x 使用 keyspace notification 监听不到 Key 过期事件
- 嵌入式链接脚本(LINK SCRIPT)介绍
- zbar中的zbar_scan_image 函数
- PM2源码分析
- zbar库中的zbar_scan_y函数
- 快速学习-Nacos Config--服务配置
- C 库函数 - fread()
- pthread_join函数
- 快速学习-Sleuth--链路追踪
- pthread_cancel函数