ImageVerifierCode 换一换
格式:DOCX , 页数:15 ,大小:17.62KB ,
资源ID:6686312      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/6686312.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(udp传输系统.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

udp传输系统.docx

1、udp传输系统/加载库文件#pragma comment(lib, ws2_32)/加载头文件#include #include #include #include /定义多播常量#define MCASTADDR 224.3.5.8#define MCASTPORT 25000#define BUFSIZE 1024#define MCOUNT 10/定义广播常量#define BCASTPORT 5050#define BCOUNT 10/定义广播全局变量SOCKET socketBro;SOCKET socketRec;struct sockaddr_in addrBro;struct

2、sockaddr_in addrRec;BOOL broadSendFlag;BOOL broadFlag;DWORD bCount;DWORD bcastAddr;short bPort;/定义多播全局变量SOCKET socketMul;SOCKET sockJoin;struct sockaddr_in addrLocal;struct sockaddr_in addrMul;BOOL multiSendFlag;BOOL bLoopBack;BOOL multiFlag;DWORD dwInterface;DWORD dwMulticastGroup;DWORD mCount;shor

3、t mPort;/自定义函数void initial();void GetArgments(int argc, char *argv);void userHelpAll();void userHelpBro();void userHelpMul();void broadcastSend();void broadcastRec();void mulControl();void multicastSend();void multicastRec();void initial() /初始化广播全局变量 bPort = BCASTPORT; bCount = BCOUNT; bcastAddr = I

4、NADDR_BROADCAST; broadSendFlag = FALSE; broadFlag = FALSE; multiFlag = FALSE; /初始化多播全局变量 dwInterface = INADDR_ANY; dwMulticastGroup = inet_addr(MCASTADDR); mPort = MCASTPORT; mCount = MCOUNT; multiSendFlag = FALSE; bLoopBack = FALSE;void GetArgments(int argc, char *argv) int i; /如果参数小于2 if(argc = 1)

5、 userHelpAll(); return ; /获取广播选项 if(argv10=- & argv11=b) broadFlag = TRUE; for(i=2; i 3) bcastAddr = inet_addr(&argvi3); break; /广播端口号 case p: if(strlen(argvi) 3) bPort = atoi(&argvi3); break; /广播数量 case n: bCount = atoi(&argvi3); break; /其他情况转向用户帮助 default: userHelpBro(); ExitProcess(-1); break; re

6、turn; /获取多播选项 if(argv10=- & argv11=m) multiFlag = TRUE; for(i=2; i3) dwMulticastGroup = inet_addr(&argvi3); break; /本地接口地址 case i: if(strlen(argvi) 3) dwInterface = inet_addr(&argvi3); break; /多播端口号 case p: if(strlen(argvi)3) mPort = atoi(&argvi3); break; /环回标志设置为真 case l: bLoopBack = TRUE; break; /

7、发送数量 case n: mCount = atoi(&argvi3); break; /显示用户帮助 default: userHelpMul(); break; return ;/全局用户帮助函数void userHelpAll() printf(Please choose broadcast -b or multicast -m !n); printf(userHelpAll: -b -s p -h -n | -m -s -h -p -i -l -n n); userHelpBro(); userHelpMul();/广播用户帮助函数void userHelpBro() printf(B

8、roadcast: -b -s:str -p:int -h:str -n:int n); printf( -b Start the broadcast program.n); printf( -s Act as server (send data); otherwisen); printf( receive data. Default is receiver. n); printf( -p:int Port number to usen); printf( The default port is 5050.n); printf( -h:str The decimal broadcast IP

9、address. n); printf( -n:int The Number of messages to send/receive.n); printf( The default number is 10.n);/多播用户帮助void userHelpMul() printf(Multicast: -m -s -h:str -p:int -i:str -l -n:int n); printf( -m Start the multicast program.n); printf( -s Act as server (send data); otherwisen); printf( receiv

10、e data. Default is receiver. n); printf( -h:str The decimal multicast IP address to joinn); printf( The default group is: %sn, MCASTADDR); printf( -p:int Port number to use n ); printf( The default group is: %sn, MCASTADDR); printf( -i:str Local interface to bind to; by default n); printf( use INADD

11、RY_ANYn); printf( -l Disable loopbackn); printf( -n:int Number of messages to send/receiven); ExitProcess(-1);/广播消息发送函数void broadcastSend() /设置广播消息 char *smsg = The message received is from sender!; BOOL opt = TRUE; int nlen = sizeof(addrBro); int ret; DWORD i=0; /创建UDP套接字 socketBro = WSASocket(AF_I

12、NET, SOCK_DGRAM, 0, NULL, 0, WSA_FLAG_OVERLAPPED); /创建失败 if(socketBro = INVALID_SOCKET) printf(Create socket failed: %dn, WSAGetLastError(); WSACleanup(); return ; /设置广播地址各个选项 addrBro.sin_family = AF_INET; addrBro.sin_port = htons(bPort); addrBro.sin_addr.S_un.S_addr = bcastAddr; /设置该套接字为广播类型 if(set

13、sockopt(socketBro, SOL_SOCKET, SO_BROADCAST, (char FAR *)&opt, sizeof(opt) = SOCKET_ERROR) /设置失败 printf(setsockopt failed: %d, WSAGetLastError(); closesocket(socketBro); WSACleanup(); return ; /循环发送消息 while(ibCount) Sleep(1000); /从广播发送消息 ret = sendto(socketBro, smsg, 256, 0, (struct sockaddr*)&addrB

14、ro, nlen); if(ret = SOCKET_ERROR) printf(Send failed: %d!n, i); else printf(Send message %d!n, i); i+; closesocket(socketBro); WSACleanup();/广播消息的接收模块void broadcastRec() BOOL optval = TRUE; int addrBroLen; char buf256; DWORD i = 0; /该地址用来绑定套接字 addrRec.sin_family = AF_INET; addrRec.sin_addr.S_un.S_ad

15、dr = 0; addrRec.sin_port = htons(bPort); addrBro.sin_port = htons(bPort); addrBroLen = sizeof(addrBro); /创建UDP套接字 socketRec = socket(AF_INET, SOCK_DGRAM, 0); if(socketRec = INVALID_SOCKET) printf(Create socket error: %d, WSAGetLastError(); WSACleanup(); return ; /设置该套接字为可重用类型 if(setsockopt(socketRec

16、, SOL_SOCKET, SO_REUSEADDR, (char FAR*)&optval, sizeof(optval) = SOCKET_ERROR) printf(setsockopt failed: %d, WSAGetLastError(); closesocket(socketRec); WSACleanup(); return ; /绑定套接字和地址 if(bind(socketRec, (struct sockaddr *)&addrRec, sizeof(struct sockaddr_in) = SOCKET_ERROR) printf(bind failed with:

17、 %dn, WSAGetLastError(); closesocket(socketRec); WSACleanup(); return ; /从广播地址接收消息 while(ibCount) recvfrom(socketRec, buf, 256, 0, (struct sockaddr FAR *)&addrBro, (int FAR *)&addrBroLen); Sleep(2000); printf(%sn, buf); ZeroMemory(buf, 256); i+; closesocket(socketRec); WSACleanup();/多播控制函数void mulCo

18、ntrol() int optval; /创建多播UDP套接字 if(socketMul = WSASocket(AF_INET, SOCK_DGRAM, 0, NULL, 0, WSA_FLAG_MULTIPOINT_C_LEAF | WSA_FLAG_MULTIPOINT_D_LEAF | WSA_FLAG_OVERLAPPED) = INVALID_SOCKET) printf(socket failed with: %dn, WSAGetLastError(); WSACleanup(); return ; /设置本地接口地址 addrLocal.sin_family = AF_INE

19、T; addrLocal.sin_port = htons(mPort); addrRec.sin_addr.S_un.S_addr = dwMulticastGroup; /重新设置TTL值 optval = 8; if(setsockopt(socketMul, IPPROTO_IP, IP_MULTICAST_TTL, (char *)&optval, sizeof(int) = SOCKET_ERROR) printf(setsockopt(IP_MULTICAST_TTL) failed: %dn, WSAGetLastError(); closesocket(socketMul);

20、 WSACleanup(); return ; /如果指定了返还选项 if(bLoopBack) optval = 0; if(setsockopt(socketMul, IPPROTO_IP, IP_MULTICAST_LOOP, (char *)&optval, sizeof(optval) = SOCKET_ERROR) printf(setsockopt(IP_MULTICAST_LOOP) failed: %dn, WSAGetLastError(); closesocket(socketMul); WSACleanup(); return ; if(sockJoin = WSAJo

21、inLeaf(socketMul, (SOCKADDR *)&addrMul, sizeof(addrMul), NULL, NULL, NULL, NULL, JL_BOTH) = INVALID_SOCKET) printf(WSAJoinLeaf() failed: %dn, WSAGetLastError(); closesocket(socketMul); return; /多播消息发送模块void multicastSend() TCHAR sendbufBUFSIZE; DWORD i; int ret; mulControl(); /发送mCount条消息 for(i=0; i

22、mCount; +i) sprintf(sendbuf, sever 1: This is a test: %d, i); ret = sendto(socketMul, (char *)sendbuf, strlen(sendbuf), 0, (struct sockaddr *)&addrMul, sizeof(addrMul); if(ret = SOCKET_ERROR) printf(sednto failed with: %dn, WSAGetLastError(); closesocket(sockJoin); closesocket(socketMul); WSACleanup

23、(); return ; else printf(Send message %dn, i); Sleep(500); closesocket(socketMul); WSACleanup();/多播消息接收函数void multicastRec() DWORD i; struct sockaddr_in from; TCHAR recvbufBUFSIZE; int ret; int len = sizeof(struct sockaddr_in); mulControl(); for(i = 0; imCount; +i) if(ret = recvfrom(socketMul, recvb

24、uf, BUFSIZE, 0, (struct sockaddr*)&from, &len) = SOCKET_ERROR) printf(recvfrom failed with: %dn, WSAGetLastError(); closesocket(sockJoin); closesocket(socketMul); WSACleanup(); return ; recvbufret = 0; printf(RECV: %s from n, recvbuf, inet_ntoa(from.sin_addr); closesocket(socketMul); WSACleanup();in

25、t main(int argc, char *argv) WSADATA wsd; initial(); GetArgments(argc, argv); if(WSAStartup(MAKEWORD(2, 2), &wsd) != 0) printf(WSAStartup() failedn); return -1; /如果是执行广播程序 if(broadFlag) if(broadSendFlag) broadcastSend(); return 0; else broadcastRec(); return 0; /多播 if(multiFlag) if(multiSendFlag) multicastSend(); return 0; else multicastRec(); return 0; return 0;

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1