编程接收广播

2024-01-05 08:40:15 数码极客 bianji01

 

mfc中如果不设置套接字的广播功能,那么它能接收到广播消息吗!一接收与发送过程:服务器端1创建服务器套接字(create)。2服务器套接字进行信息绑定(bind),并开始监听连接(listen)。3接受来自客户端的连接请求(accept),并创建接收进程。4开始数据传输(sreceive)。5关闭套接字(closesocket)。客户机端1创建客户机套接字(create)。2与远程服务器进行连接(connect),如被接受则创建接收进程。3开始数据传输(sreceive)。4关闭套接字(closesocket)。二在vc中的实现:服务器端:一建立支持socket项目。利用appwizard创建mfcexe项目,进行到wizard的第四步时,在“whatfeatureswouldyoulikeinclude”中,选中“windowssockets”项。其它各步骤各选项根据实际应用进行选择即可。这样创建的项目就已经支持socket,并已经初始化了。如果要在已有的项目中添加socket支持,只须进行两项工作:1在stdafx.h文件中包含头文件winsock.h(#include“winsock.h”)。2在应用程序类的成员函数:“::initinstance()”中添加如下初始化套接字代码。if(!afxsocketinit()){afxmessagebox(idpsocketsinitfailed);returnfalse;}二创建服务套接字并创建监听线程。//创建服务套接字socketsercon=socket(pfinet,sockstream,0);//判断是否成功创建if(sercon==invalidsocket){afxmessagebox(“serverwrong”);return-1;}//配置套接字地址等信息sockaddrinsin;sin.sinfamily=afinet;//指定本地地址sin.sinaddr.saddr=htonl(inaddrany);//指定服务器端口号nport,可自设intnport=;sin.sinport=htons(nport);//地址信息与套接字进行绑定。if(bind(sercon,(lpsockaddr)&sin,sizeof(sin))==socketerror){afxmessagebox(“bindwrong!”);return-1;}//建立监听队列(大小为3),开始监听if(listen(sercon,3)==socketerror){afxmessagebox(“listenwrong!”);return-1;};①实现监听线程,并创建数据接收线程。//在程序需要开始监听连接的地方创建监听线程,并实现。//创建监听线程(在程序开始或按钮事件实现中)afxbeginthread(waitconnect,null);//实现监听线程uintwaitconnect(lpvoidlpparm){socketconn3;intlenc=sizeof(sockaddr);intalreadycon=0;//sercon为前面所创建服务器套接字while(1){if(alreadycon<=3){//接受连接请求connalreadycon=accept(sercon,&cin,&lenc);if(connalreadycon==invalidsocket){afxmessagebox(“acceptwrong!”);}else{//创建数据接收线程afxbeginthread(readdata,&connnalreadycon);alreadycon=alreadycon+1;return0;}}else{//避免影响主线程运行sleep(200);}}}②实现数据接收线程。uintwaitconnect(lpvoidss){socket*readsock;readsock=(socket*)ss;charbuf2000;intrevnum=0;//开始循环接受数据while(revnum!=-1){//revnum0)bufrevnum=0;//截断缓冲区//buf中存储已接受数据。}}③发送数据//conn1为用于接受连接的套接字,sstr为所发送数据。s(conn1,lpctstr(sstr),sstr.getlength(),0);④关闭套接字。//conn1为用于接受连接的套接字closesocket(conn1);客户程序端:客户端程序的编程有很多与服务器端相同或相近,甚至相同的代码。一建立支持socket项目。方法同服务器端。二创建客户套接字对服务器进行连接。//nhost须用户指定的远程服务机,ip或域名。cstringnhost;//h为地址信息structhostent*h;h=gethostbyname(nhost);//nhost须用户指定的远程服务端口号intnport;socketconclient;sockaddrincsin;if(h!=null){//创建套接字conclient=socket(afinet,sockstream,0);csin.sinfamily=afinet;memcpy(&(csin.sinaddr.saddr),h->haddr,sizeof(int));csin.sinport=htons(nport);//开始连接if(connect(conclient,(lpsockaddr)&csin,sizeof(csin))){//afxmessagebox(“connectwrong!”);return-1;}else{//连接成功,创建数据接收线程afxbeginthread(readdata,&conclient);}}三实现数据接收线程。代码与服务器端完全相同。四发送数据。//conclient为与服务器进行连接的套接字。s(conclient,lpctstr(sstr),sstr.getlength(),0);五关闭套接字。//conclient为与服务器进行连接的套接字。closesocket(conn1);在实际应用中,应当根据需要调整并改变一些变量的作用域。

声明:易趣百科所有作品(图文、音视频)均由用户自行上传分享,仅供网友学习交流。若您的权利被侵害,请联系315127732@qq.com
广告位招租
横幅广告