WEB开发网
开发学院软件开发VC Visual C++实现局域网IP多播效果 阅读

Visual C++实现局域网IP多播效果

 2009-04-11 20:04:03 来源:WEB开发网   
核心提示: Sender.c程序代码#include<winsock2.h>#include<ws2tcpip.h>#include<stdio.h>#include<stdlib.h>#defineMCASTADDR"233.0.0.1&qu

Sender.c程序

代码

#include <winsock2.h>
#include <ws2tcpip.h>
#include <stdio.h>
#include <stdlib.h>
#define MCASTADDR "233.0.0.1" //本例使用的多播组地址。
#define MCASTPORT 5150 //本地端口号。
#define BUFSIZE 1024 //发送数据缓冲大小。
int main( int argc,char ** argv)
{
 WSADATA wsd;
 struct sockaddr_in remote;
 SOCKET sock,sockM;
 TCHAR sendbuf[BUFSIZE];
 int len = sizeof( struct sockaddr_in);
 //初始化WinSock2.2
 if( WSAStartup( MAKEWORD(2,2),&wsd) != 0 )
 {
printf("WSAStartup() failedn");
return -1;
 }
 if((sock=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 -1;
 }
 //加入多播组
 remote.sin_family = AF_INET;
 remote.sin_port = htons(MCASTPORT);
 remote.sin_addr.s_addr = inet_addr( MCASTADDR );
 if(( sockM = WSAJoinLeaf(sock,(SOCKADDR*)&remote,
sizeof(remote),NULL,NULL,NULL,NULL,
JL_BOTH)) == INVALID_SOCKET)
 {
printf("WSAJoinLeaf() failed:%dn",WSAGetLastError());
closesocket(sock);
WSACleanup();
return -1;
 }

 //发送多播数据,当用户在控制台输入"QUIT"时退出。
 while(1)
 {
printf("SEND : ");
scanf("%s",sendbuf);
if( sendto(sockM,(char*)sendbuf,strlen(sendbuf),0,

(struct sockaddr*)&remote,sizeof(remote))==SOCKET_ERROR)
{
 printf("sendto failed with: %dn",WSAGetLastError());
 closesocket(sockM);
 closesocket(sock);
 WSACleanup();
 return -1;
}
if(strcmp(sendbuf,"QUIT")==0) break;
Sleep(500);
 }

 closesocket(sockM);
 closesocket(sock);
 WSACleanup();
 return 0;
}

四、小结

本实例对IP多播通信进行了探讨,实例程序由Sender和Receiver两部分组成,Sender用户从控制台上输入多播发送数据,Receiver端都要求加入同一个多播组,完成接收Sender发送的多播数据。

上一页  1 2 3 4 5 6 

Tags:Visual 实现 局域网

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接