socket 服务器关闭以后之地址复用
来源:互联网 发布:msp驱动mac 编辑:程序博客网 时间:2024/06/08 17:23
1.问题的出现
这个问题是当我在关掉服务器的时候,没有关掉客户端的时候出现了,于是我去查找原因后来发现说可以用地址复用解决,在我看来地址复用就是修改tcp服务器的状态而设定,这只是我的猜测。
2.解决方案
setsockopt这个函数,它有四个参数,详细的请查看api说明
3.代码实现
#include<unistd.h>#include<sys/stat.h>#include<sys/wait.h>#include<sys/types.h>#include<stdlib.h>#include<stdio.h>#include<fcntl.h>#include<errno.h>#include<string.h>#include<signal.h>#include<arpa/inet.h>#include<sys/socket.h>#include<netinet/in.h>int main(){ int sockfd = 0; sockfd = socket(PF_INET,SOCK_STREAM,0); if(sockfd == -1) { perror("socket fun is error\n"); exit(0); } struct sockaddr_in srvaddr; srvaddr.sin_family = AF_INET; srvaddr.sin_port = htons(8001); srvaddr.sin_addr.s_addr = inet_addr("127.0.0.1"); int optval = 1; if(setsockopt(sockfd,SOL_SOCKET,SO_REUSEADDR,&optval,sizeof(optval))) { perror("setsockopt is error\n"); exit(0); } if(bind(sockfd,(struct sockaddr*)&srvaddr,sizeof(srvaddr))<0) { perror("bind func error\n"); exit(0); } //监听 if(listen(sockfd,SOMAXCONN)<0) { perror("listen fun is error\n"); exit(0); } //客户端结构体 struct sockaddr_in perraddr; socklen_t peerlen = sizeof(perraddr); unsigned int conn = 0; //接受三次握手链接 conn = accept(sockfd,(struct sockaddr*)&perraddr,(socklen_t*)&peerlen); if(conn==-1) { perror("accept fun is error\n"); exit(0); } char revbuf[1024] = {0}; for(;;) { int ret = read(conn,revbuf,sizeof(revbuf)); if(ret == 0) { printf("对方已经关闭\n"); exit(0); } else if(ret<0) { perror("读取数据失败\n"); exit(0); } fputs(revbuf,stdout); write(conn,revbuf,ret); } close(conn); close(sockfd); return 0;}
最后在给大家一个运算结果
阅读全文
0 0
- socket 服务器关闭以后之地址复用
- svn服务器地址变换以后,mac下的处理方法
- socket端添加地址复用
- adobe 帮助地址 记录一下以后用
- 使用Socket成功谅解服务器以后获取服务器的IP和域名
- Socket编程之服务器main
- 关闭Socket
- 关闭Socket
- 关闭socket
- socket关闭
- socket关闭
- socket关闭
- socket关闭
- socket关闭
- 关闭Socket
- Socket编程之-------简单获取IP地址
- linux下socket编程之地址结构
- socket添加服务器时没有IP地址的原因:
- python|计蒜客——移除数组中的重复元素
- Linux下搭建路由器
- 20170820_C++库函数中unique()和unique_copy()和sort()函数的用法
- 青风nrf51822开发板学习记录
- 硬盘内部硬件结构和工作原理详解
- socket 服务器关闭以后之地址复用
- 2017中国大学生程序设计竞赛
- 企业职位英文缩写
- MongoDB执行计划
- C6678->SRIO和FPGA的通信
- HDU 5981 && 2016ICPC大连 K: Guess the number(推理)
- java collection
- 自定义View系列:广告倒计时View
- 在其他数都出现k次的数组中找到只出现一次的数