socket相关操作(下)
发表于:2025-12-02 作者:千家信息网编辑
千家信息网最后更新 2025年12月02日,创建socket->命名socket->创建监听4.接受连接4.1代码:int accept (int sockfd,struct sockaddr addr,socklen_t addrlen);4
千家信息网最后更新 2025年12月02日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安全错误
数据库的锁怎样保障安全
嘟嘟网络技术有限公司 周文生
江苏游戏软件开发工程
高新区好服务器货源充足
广东公安部招聘网络技术
服务器网络安全知识
国家扶持的互联网科技股票
如何抠图软件开发
网络安全的八大龙头股
亿连网络安全
软件开发工程师考研的好处
数据库保存html数据
运行管理员如何连接服务器
阿里集团网络安全经理
vsan更换服务器
服务器厂家排名
交通工程和网络安全与执法
ibm服务器3650
北京巨能引擎网络技术有限公司
为我国网络安全做出最大贡献的人
2008年服务器cpu
网站服务器安全措施
了解网络安全的意义
银行数据库顾客和账号
5.2 使用数据库
宝山区企业软件开发
服务器中的riser
模拟腹腔镜软件开发
南宁一奇网网络技术有限公司
数据服务器连接失败
信息网络安全监督检查记录表