python连接远程服务器_windows收不到组播

python连接远程服务器_windows收不到组播C/C++code//MulticastSocket.cpp:implementationfile//#include”stdafx.h”#include”MulticastSocket.h”#include”HuanRemoteServiceDlg.h”#include”atlconv.h”#ifdef_DEBUG#definenewDEBUG_NEW#undefTHI…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

C/C++ code// MulticastSocket.cpp : implementation file

//

#include “stdafx.h”

#include “MulticastSocket.h”

#include “HuanRemoteServiceDlg.h”

#include “atlconv.h”

#ifdef _DEBUG

#define new DEBUG_NEW

#undef THIS_FILE

static char THIS_FILE[] = __FILE__;

#endif

CMulticastSocket::CMulticastSocket()

{

m_hWnd = NULL;

m_bConnected = FALSE;

m_sockRecv = INVALID_SOCKET;

m_sockGroup = INVALID_SOCKET;

}

CMulticastSocket::~CMulticastSocket()

{

}

BOOL CMulticastSocket::InitInstance()

{

WSADATA wsadata;

if(WSAStartup(0x0202, & wsadata) != 0)

{

TRACE(“ERROR : InitInstance !\n”);

return FALSE;

}

return TRUE;

}

BOOL CMulticastSocket::UninInstance()

{

if(WSACleanup() != 0)

{

TRACE(“ERROR : UninInstance – %d .\n”, WSAGetLastError());

return FALSE;

}

return TRUE;

}

BOOL CMulticastSocket::IsConnected()

{

return m_bConnected;

}

BOOL CMulticastSocket::CreateInstance(const char* strGroupAddr, unsigned short sPort, HWND hWnd)

{

if(m_bConnected == TRUE)

{

TRACE(“Has created successfully .\n”);

return TRUE;

}

m_hWnd = hWnd;

m_sockRecv = socket(AF_INET, SOCK_DGRAM, 0);

if(m_sockRecv == INVALID_SOCKET)

{

TRACE(“ERRROR : socket – %d .\n”, WSAGetLastError());

return FALSE;

}

int optval = 1;

if(setsockopt(m_sockRecv, SOL_SOCKET, SO_REUSEADDR, (char *) & optval, sizeof(optval)) == SOCKET_ERROR)

{

TRACE(“ERRROR : setsockopt(SO_REUSEADDR) – %d .\n”, WSAGetLastError());

return FALSE;

}

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

m_saLocal.sin_family = AF_INET;

m_saLocal.sin_port = htons(sPort);

if(bind(m_sockRecv, (sockaddr *) & m_saLocal, sizeof(m_saLocal)) == SOCKET_ERROR)

{

TRACE(“ERRROR : bind(SO_REUSEADDR) – %d .\n”, WSAGetLastError());

return FALSE;

}

m_saGroup.sin_addr.S_un.S_addr = inet_addr(strGroupAddr);

m_saGroup.sin_family = AF_INET;

m_saGroup.sin_port = htons(sPort);

ip_mreq mcast;

mcast.imr_multiaddr.S_un.S_addr = m_saGroup.sin_addr.S_un.S_addr;

mcast.imr_interface.S_un.S_addr = m_saLocal.sin_addr.S_un.S_addr;

if (setsockopt(m_sockRecv, IPPROTO_IP, IP_ADD_MEMBERSHIP, (char *) & mcast, sizeof(mcast)) == SOCKET_ERROR)

{

TRACE(“ERRROR : setsockopt(IP_ADD_MEMBERSHIP) – %d .\n”, WSAGetLastError());

return FALSE;

}

//optval = 16;

optval = 1;

if (setsockopt(m_sockRecv, IPPROTO_IP, IP_MULTICAST_TTL, (char *) & optval, sizeof(optval)) == SOCKET_ERROR)

{

TRACE(“ERRROR : setsockopt(IP_MULTICAST_TTL) – %d .\n”, WSAGetLastError());

return FALSE;

}

int ret = WSAAsyncSelect(m_sockRecv, m_hWnd, WM_MULTIPOINTEVENT, FD_WRITE | FD_READ | FD_QOS | FD_GROUP_QOS | FD_CONNECT);

if(ret == SOCKET_ERROR)

{

TRACE(“ERRROR : WSAAsyncSelect – %d .\n”, WSAGetLastError());

return FALSE;

}

m_bConnected = TRUE;

return TRUE;

}

int CMulticastSocket::RecvData(char * pData, int nSize, sockaddr * pSA, int * pSALen)

{

if(m_bConnected == FALSE)

{

TRACE(“ERROR : RecvData – m_bConnected == FALSE .\n”);

return SOCKET_ERROR;

}

int ret;

if((ret = recvfrom(m_sockRecv, pData, nSize, 0, pSA, pSALen)) == SOCKET_ERROR)

{

TRACE(“ERROR : recvfrom – %d .\n”, WSAGetLastError());

return SOCKET_ERROR;

}

return ret;

}

int CMulticastSocket::SendData(const char * pData, int nSize)

{

if(m_bConnected == FALSE)

{

TRACE(“ERROR : SendData – m_bConnected == FALSE .\n”);

return SOCKET_ERROR;

}

int ret = sendto(m_sockRecv, pData, nSize, 0, (sockaddr *) & m_saGroup, sizeof(m_saGroup));

if(ret == SOCKET_ERROR)

{

TRACE(“ERROR : sendto — %d .\n”, WSAGetLastError());

return SOCKET_ERROR;

}

return ret;

}

void CMulticastSocket::Close()

{

if(m_sockRecv != INVALID_SOCKET)

{

///凑合着用

ip_mreq mcast;

mcast.imr_multiaddr.S_un.S_addr = m_saGroup.sin_addr.S_un.S_addr;

mcast.imr_interface.S_un.S_addr = m_saLocal.sin_addr.S_un.S_addr;

if (setsockopt(m_sockRecv, IPPROTO_IP, IP_DROP_MEMBERSHIP, (char *)&mcast, sizeof(mcast)) == SOCKET_ERROR)

{

TRACE(“ERRROR : setsockopt(IP_DROP_MEMBERSHIP) – %d .\n”, WSAGetLastError());

}

///

closesocket(m_sockRecv);

}

if(m_sockGroup != INVALID_SOCKET)

{

closesocket(m_sockGroup);

}

m_hWnd = NULL;

m_bConnected = FALSE;

m_sockRecv = INVALID_SOCKET;

m_sockGroup = INVALID_SOCKET;

}

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

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/187075.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • django 框架模型之models常用的Field「建议收藏」

    django 框架模型之models常用的Field「建议收藏」网址https://blog.csdn.net/weixin_37773766/article/details/803302211.django模型models常用字段1、models.A

  • Synth_Runner命令:合成控制法高效实现

    Synth_Runner命令:合成控制法高效实现原文链接:https://www.lianxh.cn/news/db3d2785cd5c0.html目录1.背景介绍 2.合成控制法原理 3.合成控制高效实现:`synth_runner` 3.1命令安装 3.2语法格式 3.3加州控烟案例 4.参考资料连享会合成控制法专题推文合成控制法(SyntheticControlMethod)及Stata实现 Stata:合成控制法程序 Stata:合成控制法synth命令无法加载pl…

  • java-封装及其this 指针

    java-封装及其this 指针

  • Parallel ForEach For 多线程并行计算使用注意

    Parallel ForEach For 多线程并行计算使用注意之前用DataTable进行遍历,出现索引超出范围问题,因为List<T>也只支持单线程,改用ConcurrentBag解决问题。在ParallelForEach/For外的变量要避免同时操作同一个变量造成数据不一致的情况。List<T>转为ConcurrentBagConcurrentBag<T>concT=newC…

  • nema23_关于NEMA SM 23的说明

    nema23_关于NEMA SM 23的说明Unfortunately,NEMASM23isambiguousaboutthepointofresolutionofthecombinedforcesandmoments.Theresolutionpointshavebeeninterpretedtobethefollowingtwopoints:NEMASM23没有给出设备整体校核时所有作…

    2022年10月23日
  • Mysql海量数据处理

    Mysql海量数据处理一说海量数据有人就说了直接用大数据,那只能说不太了解这块,为此我们才要好好的去讲解一下海量的处理海量数据的处理分为两种情况1)表中有海量数据,但是每天不是很快的增长2)表中有还流量数据,而且每天很快速的增长针对这了两种情况,我们给出的解决方案也不太一样,而且也不是所有的项目都是这样的情况。海量数据的解决方案1)使用缓存2)页面静态化技术3)数据库优化4)分离数据库中活跃的…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号