2025年udp组播接收和发送程序(udp组播发送需要绑定ip吗)

udp组播接收和发送程序(udp组播发送需要绑定ip吗)include iostream include Send h using namespace std Send Send void m socket INVALID SOCKET WSAData ws 每个 Winsock 程序必须使用 WSAStartup 载入合适的 Winsock 动态链接库 如果载入失败 WSAStartup 将返回 SOCKET ERROR 这个错误就是 WSANOTINITIA if iostream



#include <iostream>

#include "Send.h"

using namespace std;

Send::Send(void)

{

m_socket = INVALID_SOCKET;

WSAData ws;

//每个Winsock程序必须使用WSAStartup载入合适的Winsock动态链接库,如果载入失败,WSAStartup将返回SOCKET_ERROR,这个错误就是WSANOTINITIALISED

if (WSAStartup(MAKEWORD(1,1),&ws)!=0)

{

cout<<"WSAStartup failed! Error: "<<WSAGetLastError()<<endl;

}

}

Send::~Send(void)

{

WSACleanup();

}

bool Send::InitSocket(const string strIPAddress,const string strPort)

{

//创建套接字,ipv4,报文,udp协议

m_socket = socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP);

//创建socket失败

if (INVALID_SOCKET == m_socket)

{

cout<<"failed to create socket"<<endl;

return false;

}

//初始化sock地址

InitSockAddress(strIPAddress,strPort);

// 绑定

if (bind (m_socket,

(struct sockaddr FAR *) &m_sockLocalAddress,

sizeof (m_sockLocalAddress)) == SOCKET_ERROR)

{

//报错

cout<<"Binding socket failed! Error: "<<WSAGetLastError()<<endl;

closesocket (m_socket);

return false;

}

int iOptVal=64; //1秒

// 设置组播存活时间

if (setsockopt (m_socket,

IPPROTO_IP,

3,

(char FAR *)&iOptVal,

sizeof (int)) == SOCKET_ERROR)

{

//报错

cout<<"setsockopt failed! Error:"<<WSAGetLastError()<<endl;

closesocket (m_socket);

return false;

}

return true;

}

void Send::CleanSocket()

{

shutdown(m_socket,0x01);

closesocket(m_socket);

}

bool Send::SendStringData(const string strMessage)

{

if (sendto (m_socket,

(char *)&strMessage,

sizeof(strMessage),

0,

(struct sockaddr FAR *) &m_sockDesAddress,

sizeof (m_sockDesAddress)) == SOCKET_ERROR)

{

//报错

cout<<"sendto failed! Error: %d"<<WSAGetLastError ()<<endl;

closesocket (m_socket);

return false;

}

else

{

return true;

}

}

bool Send::SendStructeData(const Person person)

{

if (sendto (m_socket,

(char *)&person,

sizeof(person),

0,

(struct sockaddr FAR *) &m_sockDesAddress,

sizeof (m_sockDesAddress)) == SOCKET_ERROR)

{

//报错

cout<<"sendto failed! Error: %d"<<WSAGetLastError ()<<endl;

closesocket (m_socket);

return false;

}

else

{

return true;

}

}

void Send::InitSockAddress(const string strIPAddress,const string strPort)

{

//本地sock地址设置

m_sockLocalAddress.sin_family = AF_INET; //ipv4地址类型

m_sockLocalAddress.sin_addr.S_un.S_addr = htonl(INADDR_ANY);

m_sockLocalAddress.sin_port = htons(0);

memset(m_sockLocalAddress.sin_zero,0,8);

//目的sock地址设置

//IPv4版本

m_sockDesAddress.sin_family = AF_INET;

//端口

m_sockDesAddress.sin_port = htons (atol(strPort.c_str()));

//地址

m_sockDesAddress.sin_addr.s_addr = inet_addr (strIPAddress.c_str());

编程小号
上一篇 2025-02-28 20:57
下一篇 2025-02-28 17:51

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ri-ji/18613.html