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

udp组播接收和发送程序(udp组播发送需要绑定ip吗)include lt iostream gt include Send h using namespace std Send Send void m socket INVALID SOCKET WSAData ws 每个 Winsock 程序必须使用 WSAStartup 载入合适的 Winsock 动态链接库

大家好,我是讯享网,很高兴认识大家。

 #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-04-30 09:44
下一篇 2025-05-01 21:34

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/170505.html