socket相关操作(下)
发表于:2025-02-04 作者:千家信息网编辑
千家信息网最后更新 2025年02月04日,创建socket->命名socket->创建监听4.接受连接4.1代码:int accept (int sockfd,struct sockaddr addr,socklen_t addrlen);4
千家信息网最后更新 2025年02月04日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 54321
5.发起连接
客户端主动链接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安全错误
数据库的锁怎样保障安全
绿蜂巢网络技术
有名的网络安全网站
广东省网络安全宣传周启动
简单数据库开发
服务器一直报警
数据库读取表返回map对象
天玥服务器磁盘阵列
网络数据库信息安全
通信技术与信息网络技术区别
数据库查询结果如何算平均分
安卓远程桌面连接云服务器
静态资源服务器的意义
珠海网络安全认证
给我查查软件数据库
网络安全组工作
军队网络安全动漫
数据库技术实验一华北科技
c从数据库中提取数据
单位制定网络安全工作制度
智阳网络技术有限公司运营部
软件开发面试大题
size在数据库中的意思
svn登录是数据库的账号密码吗
工业网络技术专业好吗
游戏主播如何选择服务器
admin数据库中添加用户
anki数据库损坏
国三数据库技术
火山安卓软件开发平台
网络技术折扣