socket相关操作(下)
发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,创建socket->命名socket->创建监听4.接受连接4.1代码:int accept (int sockfd,struct sockaddr addr,socklen_t addrlen);4
千家信息网最后更新 2026年11月01日socket相关操作(下)
创建socket->命名socket->创建监听
4.接受连接
4.1代码:int accept (int sockfd,struct sockaddr addr,socklen_t addrlen);
4.2参数注释
4.2.1 sockfd:执行过李stem系统调用的监听socket
4.2.2 addr:用来获取被接受连接的远程socket地址,长度下一个参数addlen
指定。
4.3返回
成功返回新的socket连接,该socket是唯一标识
失败返回-1并且设置errno
上篇说过的客户端断网的情况,如今补充代码
int main(int argc,char *argv[]){ if(argc<=2){ printf("参数缺少 %s",basename(argv[0])); return 1; } const char *ip=argv[1]; int port = atoi(argv[2]);//atoi (表示 ascii to integer)是把字符串转换成整型数的一个函数,应用在计算机程序和办公软件中。int atoi(const char *nptr) 函数会扫描参数 nptr字符串,跳过前面的空白字符(例如空格,tab缩进)等,可以通过isspace( )函数来检测),直到遇上数字或正负符号才开始做转换,而在遇到非数字或字符串结束时('\0')才结束转换,并将结果返回。如果 nptr不能转换成 int 或者 nptr为空字符串,那么将返回 0[1] struct sockaddr_in address; bzero(&address,sizeof(address));//bzero:置字节字符串s的前n个字节为零且包括'\0'。 adress.sin_family = AF_INET; inet_pton(AF_INET,ip,&address.sin_addr);//inet_ptoi:inet_pton是一个IP地址转换函数,可以在将IP地址在"点分十进制"和"二进制整数"之间转换而且,inet_pton和inet_ntop这2个函数能够处理ipv4和ipv6。 adress.sin_port = htons(port);//htons:将整型变量从主机字节顺序转变成网络字节顺序 int sock = socket(PF_INET,SOCK_STREAM,0); assert(sock>=0);//使用断言可以创建更稳定,品质更好且不易于出错的代码。当需要在一个值为FALSE时中断当前操作的话,可以使用断言。单元测试必须使用断言(Junit/JunitX)。 int ret = bind(sock,{struct sockaddr*} &address,sizeof(address)); assert(ret!=1); ret = listen(sock,5); assert(ret!=1); sleep(20);//等待20秒,用来等待客户端连接和相关操作完成 struct sockaddr_in client; socklen_t client_addrlength = sizeof(client); int connfd = accept(sock,{struct sockaddr*} &client,&client_addrlength); if(connfd <0){ printf("errno:%d",errno); }else{ char remote[INET_ADDRSTRLEN]; //ip:inet_ntop(AF_INET,&client.sin_addr,remote,INET_ADDRSTRLEN) //端口:ntohs(client.sin_port) close(connfd); } close(sock); return 0; } ./testaccept 192.168.1.109 54321 telnet 192.168.1.109 54321 netstat -nt | grep 543215.发起连接
客户端主动链接5.1 int connect (int sockfd,const struct sockaddr * serv_addr,socklen_t addrlen);成功返回0
常见错误:ECONNREFUSED:目标端口不存在
···············ETIMEDOUT连接超时
6.关闭连接
int close(int fd);
不是真正的关闭,只是引用减1
真正关闭:int shutdown(int sockfd,int howto);
代码
客户
客户端
成功
参数
端口
监听
主动
上篇
单元
只是
品质
地址
常见
情况
标识
注释
目标
系统
链接
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
广东猪兼强互联网科技有限公司
上海卓越科技互联网
湖南永感互联网科技有限公司
互联网与科技发展
互联网科技的发展
西安互联网科技公司
广州凡科互联网科技
互联网科技论坛
互联网科技大会
居家互联网科技有限公司
温州喔噻互联网科技有限公司
互联网大会黑科技排名
赶超互联网科技 微信多开
移动互联网科技公司
阿大互联网科技有限公司
崇明区互联网教育科技售后服务
互联网5g黑科技有哪些
佛山市翊博互联网络科技有限公司
华中科技大学互联网的牛人
科技互联网经济论坛
科技赋能下的互联网金融
科技互联网龙头
杭州互联网科技公司
南京欣网互联网科技
深圳期待互联网科技
互联网科技公司的市场部门
互联网科技与大数据专业
亳州好赞互联网科技有限公司
中国互联网有什么科技
神州科技互联网有限公司