📄 组播通讯发送程序.cpp
字号:
#include <winsock2.h>
#define BUFSIZE 1024
#define MAXADDRSTR 16
#define LOOPMAX 10
#include "stdio.h"
int main() {
int nRet, i;
int nIP_TTL = 2;
BOOL bFlag;
DWORD dFlag;
DWORD cbRet;
int iLen = MAXADDRSTR;
char strDestMulti[ MAXADDRSTR] = "234.1.1.1"; //组播地址
SOCKADDR_IN stSrcAddr, stDestAddr;//原地址,目的地址
SOCKET hSock, hNewSock;
u_short nDestPort = 3456; //组播端口
WSABUF stWSABuf;
char achInBuf [BUFSIZE];
char achOutBuf[] = "Message number: ";
WSADATA stWSAData;
/*初始化 WinSock,加载ws2_32.dll */
WSAStartup(0x0202, &stWSAData);
/* convert address string to value */
stDestAddr.sin_family = AF_INET;
nRet = WSAStringToAddress (strDestMulti, AF_INET, NULL, (LPSOCKADDR)&stDestAddr, &iLen);
//主要就是用于填充Ip结构体?
/* 创建socket */
hSock = WSASocket(AF_INET, SOCK_DGRAM, 0,(LPWSAPROTOCOL_INFO)NULL, 0, WSA_FLAG_MULTIPOINT_C_LEAF| WSA_FLAG_MULTIPOINT_D_LEAF);
/* 允许端口重用 */
bFlag = TRUE;
nRet = setsockopt(hSock, SOL_SOCKET, SO_REUSEADDR,(char *)&bFlag, sizeof
(bFlag));
stSrcAddr.sin_family = PF_INET; //数据发送源地址
stSrcAddr.sin_port = htons ( nDestPort);
stSrcAddr.sin_addr.s_addr = inet_addr("234.1.1.1");
nRet = bind (hSock,(struct sockaddr FAR *)&stSrcAddr,sizeof(struct sockaddr));
/* byte swap host to network order */
stDestAddr.sin_family = PF_INET;
nRet = WSAHtons(hSock, nDestPort, &(stDestAddr.sin_port));
/* set the IP TTL */
nRet = WSAIoctl (hSock, SIO_MULTICAST_SCOPE, &nIP_TTL, sizeof (nIP_TTL), NULL, 0, &cbRet, NULL, NULL);
/* 禁止loopback */
bFlag = FALSE;
nRet = WSAIoctl (hSock, SIO_MULTIPOINT_LOOPBACK, &bFlag, sizeof (bFlag), NULL, 0, &cbRet, NULL, NULL);
/* 加入multicast 组*/
hNewSock = WSAJoinLeaf (hSock,(PSOCKADDR)&stDestAddr, sizeof (stDestAddr), NULL, NULL, NULL, NULL, JL_BOTH);
/* 发送和接收*/
static iCounter = 1;
stWSABuf.buf = achOutBuf;
stWSABuf.len = lstrlen(achOutBuf);
cbRet = 0;
itoa(iCounter++, &achOutBuf[ 16], 10);
nRet = WSASendTo (hSock, &stWSABuf, 1, &cbRet, 0, (struct sockaddr*)&stDestAddr, sizeof(struct sockaddr), NULL, NULL);
if (nRet == SOCKET_ERROR)
printf("WSASendTo() failed, Err: % d\ n",WSAGetLastError());
/*结束Socket */
WSACleanup();
return (0);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -