jquery plugin 검색 사이트

기타/링크|2022. 9. 10. 20:25
300x250

 

1. JqueryScript.net

https://www.jqueryscript.net/

 

Free jQuery Plugins and Tutorials - jQuery Script

 

www.jqueryscript.net

 

2. Jquery-Plugins

https://jquery-plugins.net

 

Bootstrap Tags Input

Bootstrap Tags Input is a jQuery plugin providing a Bootstrap user interface for managing tags.

jquery-plugins.net

 

 

 

 

300x250

댓글()

Flutter 플루터 main.dart 변경 하기

300x250

 

 

 

 

Android Studio 기준으로 작성하였습니다.

 

1. 좌측 lib 폴더에서 마우스 우클릭 후

New -> Dart File 을 선택하여 파일을 만들어 줍니다.

코드 내용은 main.dart를 참조하여 클래스명만 바꺼주시면 됩니다.

 

 

2. 우측 상단에 보면 빌드 타겟 정하고, 빌드하는 버튼이 있는곳을 보면

Edit Configurations 버튼을 눌러줍니다.

 

 

3. main.dart에 입력되어있는 값들을 확인후에

 

 

4. +버튼을 누른후 Flutter를 선택 하여

    Name은 추가한 dart 이름을 넣어주시고

    Dart entrypoint는 추가한 dart 경로를 넣습니다.

    그리고 Share through VSC 체크후 OK를 눌러줍니다.

 

 

5. main.dart 부분을 아까 추가한 logo.dart를 선택 후 컴파일 하면 끝!

 

 

 

 

300x250

댓글()

UDP Multicast 테스트 프로그램 및 코드

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

댓글()