mode: 命令 msg: 附加信息 struct sockaddr *p:网络信息 fd:网络套接字描述符
int msg_send(const int mode,const char *msg,const struct sockaddr *p,int fd) { int udp_fd=fd; int broadcast_en=1; char msg_buf[SND_BUF_LEN]; char *use="test",*group="sunplusapp"; socklen_t broadcast_len=sizeof(broadcast_en); long int msg_id=time((time_t *)NULL); struct sockaddr_in udp_addr; struct sockaddr client; bzero(msg_buf,SND_BUF_LEN); bzero(&udp_addr,sizeof(struct sockaddr_in)); udp_addr.sin_family=AF_INET; udp_addr.sin_port=htons(IPMSG_UDP_PORT); inet_pton(AF_INET,BR_IP,&udp_addr.sin_addr.s_addr);
//下边的if 与else if :对于上线通告 下线等使用广播地址,其他的则否 if( (p==NULL)&&(mode!=IPMSG_NOOPERATION)&&(mode!=IPMSG_BR_ENTRY)&&(mode!=IPMSG_BR_EXIT)) { printf("p is NULL,only mode = IPMSG_NOOPERATICNA IPMSG_BR_ENTRY IPMSG_EXIT is allowed p=NULL /n"); return 1; } else if( (p!=NULL)&&(mode!=IPMSG_NOOPERATION)&&(mode!=IPMSG_BR_ENTRY)&&(mode!=IPMSG_BR_EXIT)) client=*p;
//打开广播 if( setsockopt(udp_fd,SOL_SOCKET,SO_BROADCAST,&broadcast_en,broadcast_len)<0 ) { perror("setsockopt error"); exit(1); } switch (mode) { case IPMSG_NOOPERATION: sprintf(msg_buf,"1:%d:%s:%s:%d:%s",msg_id,use,group,mode,NULL); sendto(udp_fd,msg_buf,strlen(msg_buf),0,(struct sockaddr *)&udp_addr,sizeof(struct sockaddr)); break; case IPMSG_BR_ENTRY: sprintf(msg_buf,"1:%d:%s:%s:%d:%s",msg_id,use,group,mode,msg); sendto(udp_fd,msg_buf,strlen(msg_buf),0,(struct sockaddr *)&udp_addr,sizeof(struct sockaddr)); break; case IPMSG_BR_EXIT: sprintf(msg_buf,"1:%d:%s:%s:%d:%s",msg_id,use,group,mode,msg); sendto(udp_fd,msg_buf,strlen(msg_buf),0,(struct sockaddr *)&udp_addr,sizeof(struct sockaddr)); break; case IPMSG_ANSENTRY: sprintf(msg_buf,"1:%d:%s:%s:%d:%s",msg_id,use,group,mode,msg); sendto(udp_fd,msg_buf,strlen(msg_buf),0,&client,sizeof(struct sockaddr)); break; case IPMSG_SENDMSG: sprintf(msg_buf,"1:%d:%s:%s:%d:%s",msg_id,use,group,mode,msg); sendto(udp_fd,msg_buf,strlen(msg_buf),0,&client,sizeof(struct sockaddr)); break; case IPMSG_SENDMSG_OPT: sprintf(msg_buf,"1:%d:%s:%s:%d:%s",msg_id,use,group,mode,msg); sendto(udp_fd,msg_buf,strlen(msg_buf),0,&client,sizeof(struct sockaddr)); break; case IPMSG_RECVMSG: sprintf(msg_buf,"1:%d:%s:%s:%d:%s",msg_id,use,group,mode,msg); sendto(udp_fd,msg_buf,strlen(msg_buf),0,&client,sizeof(struct sockaddr)); break; case IPMSG_GETFILEDATA: sprintf(msg_buf,"1:%d:%s:%s:%d:%s",msg_id,use,group,mode,msg); sendto(udp_fd,msg_buf,strlen(msg_buf),0,&client,sizeof(struct sockaddr)); break; case IPMSG_RELEASEFILES: sprintf(msg_buf,"1:%d:%s:%s:%d:%s",msg_id,use,group,mode,msg); sendto(udp_fd,msg_buf,strlen(msg_buf),0,&client,sizeof(struct sockaddr)); break; case IPMSG_GETDIRFILES: sprintf(msg_buf,"1:%d:%s:%s:%d:%s",msg_id,use,group,mode,msg); sendto(udp_fd,msg_buf,strlen(msg_buf),0,&client,sizeof(struct sockaddr)); break; default: printf("no match mode !/n"); break; } broadcast_en=0;
// 关掉广播 if( setsockopt(udp_fd,SOL_SOCKET,SO_BROADCAST,&broadcast_en,broadcast_len)<0 ) { perror("setsockopt error"); exit(1); } printf("msg send ok ! /n"); return 0; }
|
相关推荐
IPMSG飞鸽传书,局域网最好的传输和聊天工具,速度超快
IPMSG飞鸽传书经典版,局域网内,消息传递,文件发送的利器
IPMSG飞鸽传书增强版,无单文件5G限制。 可以传任意大小文件,文件夹。内网联系很方便。
IPMSG飞鸽传书2007 局域网文件传输 IPMSG飞鸽传书2007 IPMSG飞鸽传书2007 IPMSG飞鸽传书2007 简单实用,方便快捷!
IPMsg 飞鸽传书 C#源码 TCP协议 Sockets 局域网内测试良好 大家可以下载试试看
IPMSG飞鸽传书源码
IPMsg飞鸽传书
IPMSG 飞鸽 飞鸽传书 熟读很快 飞信 IPMSG 飞鸽 飞鸽传书 熟读很快 飞信
飞鸽传书源码阅读,ipmsg飞鸽传书源码
IPMSG 飞鸽传书 源代码.rar
- IPMsg 是一款局域网内即时通信软件, 基于 TCP/IP(UDP). 可运行于多种操作平台(Win/Mac/UNIX/Java), 并实现跨平台信息交流. - 不需要服务器支持. - 支持文件/文件夹的传送 (2.00版以上) - 通讯数据采用 RSA...
IPMSG 飞鸽传书 IP信使 3.32版 简体中文版
飞鸽传书 飞鸽传书 飞鸽传书 飞鸽传书 飞鸽传书 飞鸽传书 飞鸽传书 飞鸽传书 飞鸽传书 飞鸽传书 飞鸽传书
ipmsg代码 飞鸽传书 ipmsg代码 飞鸽传书
飞鸽传书是局域网常用的文件传输工具,传输文件速度快,堪称局域网内的QQ软件
IPMsg 是一款局域网内即时通信软件 - IPMsg 是一款局域网内即时通信软件, 基于 TCP/IP(UDP). 可运行于多种操作平台(Win/Mac/UNIX/Java), 并实现跨平台信息交流. - 不需要服务器支持. - 支持文件/文件夹的传送...
不需要服务器支持。免费软件, 是一款局域网内即时通信软件,基于 TCP/IP(UDP)。可运行于多种操作平台(Win/Mac/UNIX/Java),并实现跨平台信息交流。
IPMSG 飞鸽传书 局域网高速传输 谁用谁知道
很简单好用的传输工具,可以传输文件和文件夹 好东西用了就知道!! 推荐! 完全绿色!