300x250
반응형

첫 뮤지컬 관람

 

300x250
반응형

'기타' 카테고리의 다른 글

가덕도 드라이브 커피집, 경치  (0) 2021.03.20
플스4 사용기  (0) 2021.03.20
첫차 - 아반떼 MD  (0) 2021.03.20
오락실 이니셜D 제로  (0) 2021.03.20
학장반도보라아파트  (0) 2021.03.20
300x250
반응형

랭킹 273등!!! 찍었을때

300x250
반응형

'기타' 카테고리의 다른 글

가덕도 드라이브 커피집, 경치  (0) 2021.03.20
플스4 사용기  (0) 2021.03.20
첫차 - 아반떼 MD  (0) 2021.03.20
2019년 12월 26일 - 오페라의 유령  (0) 2021.03.20
학장반도보라아파트  (0) 2021.03.20
300x250
반응형

초등학교 2학년 ~ 고등학교 1학년 까지 살던 곳

아파트 앞에서 농구하고 야구하고 축구하고 뛰어다니고 했는데 아직 존재하는 곳

 

디아블로 하고 스타크래프트 하고, 볼링치고 등등 많은 추억이 있는 부산시 사상구 학장동 학장반도보라아파트

 

300x250
반응형

'기타' 카테고리의 다른 글

가덕도 드라이브 커피집, 경치  (0) 2021.03.20
플스4 사용기  (0) 2021.03.20
첫차 - 아반떼 MD  (0) 2021.03.20
2019년 12월 26일 - 오페라의 유령  (0) 2021.03.20
오락실 이니셜D 제로  (0) 2021.03.20
300x250
반응형

brunch.co.kr/@99-life/5

300x250
반응형

'기타 > 링크' 카테고리의 다른 글

큐티 관련  (0) 2021.10.14
UI 디자인 사이트  (0) 2021.10.07
베이지안 확률  (0) 2021.10.01
각도기 사이트 링크  (0) 2021.08.09
https://codepen.io/  (0) 2021.07.06
300x250
반응형

UDP Multicast 테스트 프로그램 입니다.

1. 전송할 랜카드를 선택해 주세요(중요)

2. IP, PORT 입력 후 연결 클릭

3. 하단에 전송할 내용 입력 후 송신을 누르면 됩니다.

 

UDP Multicast 아이피 범위는 시작이 224 ~ 239로 시작해야 합니다.

(프로그램은 visual studio 2015로 제작되었습니다.)

 

 

 프로그램 다운로드(아래) 

Multicast Test.zip
0.07MB

 

 

[ 랜카드 목록 검색]

#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);

 

 

 

 

[ Wireshark로 전송 및 수신 확인]

랜카드 선택하는 부분은 예를들어 노트북에 랜카드가 연결되어있고 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 사이트에서 보시면 될것 같습니다.

 

 

 

 

 

[정보가 도움이 되셨다면 광고 배너 클릭이 글쓴이의 활력이 됩니다.]

감사합니다.

 

 

 

 

 

300x250
반응형
300x250
반응형

Blue.zip
0.06MB

 

위 프로그램을 실행하면 컴퓨터가 블루스크린 뜨면서 꺼지게 됩니다.

300x250
반응형
300x250
반응형

open failed: EACCES (Permission denied)

안드로이드 10 버전에서 파일 저장 시 생기는 문제입니다.

 

 

AndroidMainfiest.xml 코드내 application 사이에 추가 합니다.

 

<application

 

android:requestLegacyExternalStorage="true"

android:theme="@style/AppTheme"
android:usesCleartextTraffic="true"
tools:replace="android:label">

 

 

<activity> --- </activity>

</application>

 

 

 

 

 

300x250
반응형
300x250
반응형

RadioTextColorTest.zip
0.29MB
RadioTextColorTest.exe
0.09MB

 

 

1. OnInitDialog() 함수 내에 아래 코드를 넣어줍니다.

1
::SetWindowTheme(GetDlgItem(IDC_RADIO1)-&gt;m_hWnd, L"", L"");
cs

 

2. OnCtlColor 함수 내에 변경될 색과 배경을 넣어줍니다.

1
2
3
4
5
6
   if (pWnd->GetDlgCtrlID() == IDC_RADIO1)
    {
        pDC->SetTextColor(RGB(25500));  // static text 글자색 변경
        pDC->SetBkMode(TRANSPARENT);   // static text 배경색 투명    
        //hbr = (HBRUSH)::GetStockObject(NULL_BRUSH);
    }
cs

 

 

[정보가 도움이 되셨다면 광고 배너 클릭이 글쓴이의 활력이 됩니다.]

감사합니다.

 

300x250
반응형

+ Recent posts