socket相关操作(下)
admin
2023-03-13 22:21:03
0

创建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);

上一篇:nginx 日志

下一篇:socket的相关操作

相关内容

热门资讯

以军空袭黎巴嫩南部多地,造成至... 总台记者获悉,当地时间5月9日下午,以军空袭黎巴嫩南部西顿、宾特朱拜勒、迈法敦等多地,位于黎南部的萨...
豪华邮轮3人死于汉坦,专家:中... 经济观察报 记者 刘晓诺“陈某下船至今39天,无相关症状,汉坦病毒核酸检测结果均为阴性。经专家研判,...
斯塔默迎来至暗时刻 入主唐宁街10号不到两年,斯塔默迎来至暗时刻,成为史上最不受欢迎的英国首相之一。5月7日举行的地方选...
视频丨天舟货运“零差评”背后 ... 5月8日,天舟十号货运飞船与长征七号遥十一运载火箭组合体垂直转运至发射区,计划于近日择机实施发射。天...
媒体:精神病院成十大股东,不该... 近日,一则“精神病院现身A股公司前十大股东”的消息引发广泛关注。有投资者发现,盛通股份2026年一季...
原创 美... 最近有个消息,可能不少人都刷到了。工信部正式批了一个6G试验的频率使用许可,支持在部分地区先搞一搞6...
昆仑数智申请资源信息获取方法专... 国家知识产权局信息显示,昆仑数智科技有限责任公司、中国石油天然气集团有限公司申请一项名为“资源信息获...
小雨智造与中建科工智能科技达成... 来源:滚动播报 (来源:北京商报) 北京商报讯(记者 和岳)5月9日,北京商报记者获悉,在 “人工智...
2026年5月工作手机管控系统... 2026 年 5 月,企业对工作手机管控系统的需求,已从基础行为规范升级为全链路安全防护 + AI ...
蚂蚁百灵新万亿级大模型开放一周... IT之家 5 月 9 日消息,蚂蚁集团旗下百灵大模型今天发布万亿级旗舰思考模型 Ring-2.6-1...