'기타 > 링크' 카테고리의 다른 글
그래픽 비교 사이트 (0) | 2022.12.12 |
---|---|
CPU 비교 사이트 (0) | 2022.12.12 |
3D 툴 (0) | 2022.11.01 |
C#으로 OpenGL 및 ImGUI 학습 2.5개월 경과 쇼케이스 (0) | 2022.10.31 |
3D 모델 사이트 (0) | 2022.10.28 |
그래픽 비교 사이트 (0) | 2022.12.12 |
---|---|
CPU 비교 사이트 (0) | 2022.12.12 |
3D 툴 (0) | 2022.11.01 |
C#으로 OpenGL 및 ImGUI 학습 2.5개월 경과 쇼케이스 (0) | 2022.10.31 |
3D 모델 사이트 (0) | 2022.10.28 |
#pragma once
#include "GlRender.h"
class RenderTest : public GlRender
{
public:
RenderTest();
~RenderTest();
private:
void GlInit() override;
void GlDraw() override;
};
헤더는 GlRender를 상속받습니다.
GlRender 클래스에 가상함수로 호출되기 때문에 GlInit(), GlDraw() 함수는 오버라이드!
#include "stdafx.h"
#include "RenderTest.h"
RenderTest::RenderTest(){}
RenderTest::~RenderTest(){}
void RenderTest::GlInit(){}
void RenderTest::GlDraw()
{
glViewport(0, 0, gl_window_width, gl_window_height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho((double)-gl_window_width / 2, (double)gl_window_width / 2,
(double)-gl_window_height / 2, (double)gl_window_height / 2,
1, -1);
glMatrixMode(GL_MODELVIEW);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glClearColor(0, 0, 0, 0);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glPushMatrix();
{
glBegin(GL_LINES);
glColor4f(0, 1, 0, 1);
glVertex2d(0, 0);
glVertex2d(200, 100);
glEnd();
}
glPopMatrix();
glDisable(GL_BLEND);
glMatrixMode(GL_MODELVIEW);
glMatrixMode(GL_PROJECTION);
}
#pragma comment ( lib, "OpenGL32.lib" )
#ifdef _WIN32
#include "OpenGL_lib/core/x86/glew.h"
#include "OpenGL_lib/core/x86/wglew.h"
#endif
#ifdef _WIN64
#include "OpenGL_lib/core/x64/glew.h"
#include "OpenGL_lib/core/x64/wglew.h"
#endif
RenderTest m_render_test;
m_render_test.Create(this);
m_render_test.GlStart();
m_render_test.GlResize(cx, cy);
m_render_test.GlClose();
OpenGL 강좌3 - EBO + VAO + VBO (0) | 2022.10.26 |
---|---|
OpenGL 강좌2 - VBO (VertexBufferObject) (0) | 2022.10.26 |
OpenGl SuperBible 6 [예제 3-9] 지오메트리 쉐이더 (0) | 2020.07.27 |
OpenGl SuperBible 6 [예제 3-8] 테셀레이션 이벨류에이션 쉐이더 (0) | 2020.07.27 |
OpenGl SuperBible 6 [예제 3-4] 프래그먼트 쉐이더에서 입력받기 (0) | 2020.07.27 |
3D 모델 사이트 (0) | 2022.10.28 |
---|---|
주식 결손금 관련 기사 (0) | 2022.10.21 |
jquery plugin 검색 사이트 (0) | 2022.09.10 |
CSS 애니메이션(Animation) 실제로 어떻게 쓰나? (0) | 2022.09.03 |
메디패스 앱 ( 걸으면 메디블록 적립 ) (0) | 2022.07.11 |
메디패스 앱 ( 걸으면 메디블록 적립 ) (0) | 2022.07.11 |
---|---|
2금융 조합원의 세금혜택 및 예적금 이자 많이 받는 방법 (0) | 2022.07.02 |
코딩팩토리 - 코딩 블로그 (0) | 2022.06.16 |
위키독스 - 온라인 책을 제작 공유하는 플랫폼 서비스 (0) | 2022.06.16 |
C/C++ 에서 Matlab 함수 및 m파일 사용하기 (0) | 2022.05.31 |
UDP Multicast 아이피 범위는 시작이 224 ~ 239로 시작해야 합니다.
(프로그램은 visual studio 2015로 제작되었습니다.)
프로그램 다운로드(아래)
#include <iphlpapi.h>
#pragma comment(lib, "iphlpapi.lib")
#include <vector>
std::vector<std::string> vector_ethernet;
std::vector<std::string> vector_ip;
// 현재 연결된 인터넷에서 검색
PIP_ADAPTER_INFO pAdapterInfo;
pAdapterInfo = (IP_ADAPTER_INFO *)malloc(sizeof(IP_ADAPTER_INFO));
ULONG buflen = sizeof(IP_ADAPTER_INFO);
if (GetAdaptersInfo(pAdapterInfo, &buflen) == ERROR_BUFFER_OVERFLOW) {
free(pAdapterInfo);
pAdapterInfo = (IP_ADAPTER_INFO *)malloc(buflen);
}
if (GetAdaptersInfo(pAdapterInfo, &buflen) == NO_ERROR) {
PIP_ADAPTER_INFO pAdapter = pAdapterInfo;
while (pAdapter)
{
vector_ethernet.push_back(pAdapter->Description);
vector_ip.push_back(pAdapter->IpAddressList.IpAddress.String);
pAdapter = pAdapter->Next;
}
}
위의 코드 적용 시
vector_ethernet 에는 랜카드 이름이
vector_ip 는 랜카드 ip가 추가됩니다.
IN_ADDR localaddr;
localaddr.s_addr = inet_addr(find_address.c_str());
int result_select = setsockopt(socket_, IPPROTO_IP, IP_MULTICAST_IF, (char*)&localaddr, sizeof(localaddr));
IP_ADD_MEMBERSHIP 을 사용해서 그룹에 조인 후에 사용해야 합니다.
#include <string>
#include <WS2tcpip.h>
#include <iphlpapi.h>
#pragma comment(lib, "iphlpapi.lib")
SOCKET socket_;
SOCKADDR_IN sock_addr{};
struct ip_mreq mreq{};
bool NetFrame::Create(const std::string &a_ip, const int a_port, const std::string &select_ip)
{
bool result = false;
closesocket(socket_);
int nSocketType = SOCK_DGRAM;
socket_ = socket(PF_INET, nSocketType, 0);
if (socket_ != INVALID_SOCKET)
{
sock_addr.sin_family = AF_INET;
sock_addr.sin_port = htons(static_cast<u_short>(a_port));
sock_addr.sin_addr.s_addr = INADDR_ANY;
int optval = 1;
setsockopt(socket_, SOL_SOCKET, SO_REUSEADDR, (char*)&optval, sizeof(optval));
if (bind(socket_, reinterpret_cast<SOCKADDR*>(&sock_addr), sizeof(sock_addr)) == 0)
{
result = true;
if (false) // 내가 송신한 데이터는 안들어 오도록 설정
{
// https://wiki.kldp.org/HOWTO/html/Multicast/Multicast-HOWTO-6.html
char loop = 0;
int ret_val = setsockopt(socket_, IPPROTO_IP, IP_MULTICAST_LOOP, &loop, sizeof(loop));
}
//
// Multicast 이더넷 선택 로직
//
//1. 멀티캐스트 라우터 테이블 추가
mreq.imr_multiaddr.S_un.S_addr = inet_addr(a_ip.c_str());
if (select_ip.empty())
mreq.imr_interface.s_addr = htonl(INADDR_ANY);
else
mreq.imr_interface.s_addr = inet_addr(select_ip.c_str());
int result_join = setsockopt(socket_, IPPROTO_IP, IP_ADD_MEMBERSHIP, (char*)&mreq, sizeof(mreq));
if (result_join < 0)
result = false;
//2. 통신 인터페이스 선택(어떤걸 사용할 것인가)
if (select_ip.empty() == false)
{
IN_ADDR localaddr;
localaddr.s_addr = inet_addr(select_ip.c_str());
int result_select = setsockopt(socket_, IPPROTO_IP, IP_MULTICAST_IF, (char*)&localaddr, sizeof(localaddr));
if (result_select < 0)
result = false;
}
}
inet_pton(sock_addr.sin_family, a_ip.c_str(), &sock_addr.sin_addr.s_addr);
}
return result;
}
std::string ip
std::ethernet_ip;
int net_port;
Create(ip, port, ethernet_ip);
랜카드 선택하는 부분은 예를들어 노트북에 랜카드가 연결되어있고 Wifi
이렇게 이더넷이 2개 연결된 상태에서
랜은 선택하는 설정을 안하면 멀티캐스트 전송 시
둘다 전송하는게 아니라 제일처음 전송한 2개중 1개로 계속 전송 하는 문제가 있습니다.
아래 그림처럼 이더넷, 이더넷 4 중 한곳으로 전송 됩니다.
이더넷 을 더블클릭 하시면 앞에 파란 버튼을 누르면 패킷 캡쳐가 시작됩니다.
udp로 검색을 하시면 UDP 데이터만 보여지게 되는데
아래 목록을 더블클릭 하시면 새창으로 정보를 확인할 수 있습니다.
아래 그림 처럼 Wireshark로 데이터 패킷을 확인해 보시면 어디로가는지 확인할 수 있습니다.
[기타 OS 없는 장비 전송 방법]
Dst 부분에 IPv4mcast로 되어 있어야 멀티 캐스트 전송입니다.
Dst Mac Adress는 01:05:5e 까지 나와야 합니다.
(OS가 있는 컴퓨터가 아닌 다른 펌웨어 기반 장비 개발은 아래와 같이 송신 아이피로 MAC Adress를 입력해줘야 전송이 되더라구요)
Mac Adress 계산은
http://www.dqnetworks.ie/toolsinfo.d/multicastaddressing.html 사이트에서 보시면 될것 같습니다.
[정보가 도움이 되셨다면 광고 배너 클릭이 글쓴이의 활력이 됩니다.]
감사합니다.
MFC 화면 프린트 출력 (0) | 2021.10.12 |
---|---|
std::string <-> CString 변환 (0) | 2021.07.06 |
BlueScreen 블루스크린 만들기 SW (1) | 2021.03.04 |
MFC 라디오 버튼 색 변경 (1) | 2021.02.15 |
MFC Dialog 호출 시 실행되는 메시지 순서 (0) | 2020.08.05 |