SCTP一对多模式的服务器端代码怎么写
发表于:2025-01-21 作者:千家信息网编辑
千家信息网最后更新 2025年01月21日,今天就跟大家聊聊有关SCTP一对多模式的服务器端代码怎么写,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。以下源码是基于linux操作系统的。实
千家信息网最后更新 2025年01月21日SCTP一对多模式的服务器端代码怎么写
今天就跟大家聊聊有关SCTP一对多模式的服务器端代码怎么写,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
以下源码是基于linux操作系统的。实现了基于SCTP协议的一对多模式的服务器端代码,该段不但处理的用户数据,而且处理了的通知类的消息,即notification消息。
#include#include #include #include #include #include #include #include #include static void handle_event(void *buf){ struct sctp_assoc_change *sac; struct sctp_send_failed *ssf; struct sctp_paddr_change *spc; struct sctp_remote_error *sre; struct sctp_shutdown_event *sse; union sctp_notification *snp; snp = (sctp_notification*)buf; switch (snp->sn_header.sn_type) { case SCTP_ASSOC_CHANGE: { sac = &snp->sn_assoc_change; printf("assoc_change: state=%hu, error=%hu, instr=%hu outstr=%hu associd=%d\n", sac->sac_state, sac->sac_error, sac->sac_inbound_streams, sac->sac_outbound_streams, sac->sac_assoc_id); break; } case SCTP_SEND_FAILED: { ssf = &snp->sn_send_failed; printf("sendfailed: len=%hu err=%d assoc_i=%d ssf_data=%d\n", ssf->ssf_length, ssf->ssf_error, ssf->ssf_assoc_id, ssf->ssf_data[0]); break; } case SCTP_PEER_ADDR_CHANGE: { spc = &snp->sn_paddr_change; struct sockaddr_in *sin = (struct sockaddr_in *)&spc->spc_aaddr; char addrbuf[INET6_ADDRSTRLEN]; inet_ntop(AF_INET, &sin->sin_addr, addrbuf, INET6_ADDRSTRLEN); printf("peeraddrchange: %s state=%d, error=%d\n", addrbuf, spc->spc_state, spc->spc_error); break; } case SCTP_REMOTE_ERROR: { sre = &snp->sn_remote_error; printf("remote_error: err=%hu len=%hu\n", ntohs(sre->sre_error), ntohs(sre->sre_length)); break; } case SCTP_SHUTDOWN_EVENT: { sse = &snp->sn_shutdown_event; printf("shutdown event: assoc_id=%d\n", sse->sse_assoc_id); break; } default: { printf("unknown type: %hu\n", snp->sn_header.sn_type); break; } }}int main(int agrc, char* agrv[]){ /* Create a 1-to-many style SCTP socket. */ int fd = -1; if ((fd = socket(AF_INET, SOCK_SEQPACKET, IPPROTO_SCTP)) < 0) { perror("socket"); exit(1); } /* Enable all notifications and events */ struct sctp_event_subscribe event; event.sctp_data_io_event = 1; event.sctp_association_event = 1; event.sctp_address_event = 1; event.sctp_send_failure_event = 1; event.sctp_peer_error_event = 1; event.sctp_shutdown_event = 1; event.sctp_partial_delivery_event = 1; event.sctp_adaption_layer_event = 1; if (setsockopt(fd, IPPROTO_SCTP, SCTP_EVENTS, &event, sizeof(event)) != 0) { perror("setevent failed"); exit(1); } /* Configure auto-close timer. */ int timeout = 5; if (setsockopt(fd, IPPROTO_SCTP, SCTP_AUTOCLOSE, &timeout, 4) < 0) { perror("setsockopt SCTP_AUTOCLOSE"); exit(1); } /* Bind the socket to all local addresses. */ struct sockaddr_in sin; bzero((char*)&sin, sizeof(sin)); sin.sin_family = AF_INET; sin.sin_port = htons(19000); sin.sin_addr.s_addr = inet_addr("192.168.10.120"); if (bind(fd, (struct sockaddr *)&sin, sizeof(sin)) == -1) { perror("bind"); exit(1); } /* Enable accepting associations. */ if (listen(fd, 1) < 0) { perror("listen"); exit(1); } char buffer[256]; int bufferlen = 256; bzero(buffer, bufferlen); struct sockaddr_in clientaddr; int fromlen = sizeof(clientaddr); struct sctp_sndrcvinfo sndrcvinfo; int msg_flag; while(true) { int length = sctp_recvmsg(fd, buffer, bufferlen, (struct sockaddr*)&clientaddr, (socklen_t*)&fromlen, &sndrcvinfo, &msg_flag); if (msg_flag & MSG_NOTIFICATION) { printf("****************************************************\n"); printf("Event: notificaiton length=%d\n", length); handle_event((void*)buffer); } else { printf("****************************************************\n"); printf("Event: data event length=%d\n", length); char addrbuf[100]; inet_ntop(AF_INET, &clientaddr.sin_addr, addrbuf, INET6_ADDRSTRLEN); int port = ntohs(clientaddr.sin_port); printf("data from=%s:%d\n", addrbuf, port); printf("data=%s\n", buffer); } } if (close(fd) < 0) { perror("close"); exit(1); } return (0);}
看完上述内容,你们对SCTP一对多模式的服务器端代码怎么写有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注行业资讯频道,感谢大家的支持。
代码
服务器
模式
服务
内容
消息
处理
操作系统
数据
更多
源码
用户
知识
篇文章
系统
行业
资讯
资讯频道
频道
进一
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
台达opc服务器软件
软件开发标准化 cm
崩坏3有几个服务器
建立碳足迹基础数据库
crm软件开发程序员
港闸区智能网络技术诚信经营
电信网络技术中的数学方法
山东潍坊网络安全宣传
江苏交友软件开发要多少钱
网络安全部门是什么单位
信息网络技术专业人才培养
都匀数据库技术与应用
网络安全管理实行分级负责制
兴化进口网络技术价格查询
网络安全硕士出来做什么
深度网络技术
连接打印机的网络安全吗
上海服务器托管哪家好
腾讯免费的服务器怎么申请
服务器c610参数
微信的软件开发者是谁
网络技术网络电话软件
软件开发电脑教程
西樵市软件开发培训机构比较好
微信软件开发企业
xbox低价服务器再也没有了吗
曙光服务器启动
苏州木鱼网络技术
软件开发流程管控系统的好处
奉节软件开发