P2P 네트워크 구성 질문 드립니다.

조회수 462회

제가 p2p 환경을 간단하게 구현하고,

블록체인 기능도 추가해서 맨땅에 하려고 합니다.

(네트워크/ 블록체인에 관심이 많아서요)

그런데 지금 문제점이 저는 Winsock2.h 이용해서 만들고 있습니다. 만들던 중에

accetp() 함수를 사용하려고 하니 런타임아웃에 빠지니까 스레드를 이용해서 구현을 해야겠다라고 생각이 들더군요... 근데 또 이게 맞는가 싶기도 하고 갈피를 못 잡겠네요...

#include <iostream>
#include "main.h"

using namespace std;

int main()
{
    WSADATA wsdata;
    int v_check = WSAStartup(MAKEWORD(2, 2), &wsdata);
    if (v_check != 0) {                                 // 0일 때 True , 나머지 false
        cout << "버전을 확인 해주세요" << "\n";
    }

    SOCKET ser_sock;
    ser_sock = socket(AF_INET, SOCK_STREAM, 0);

    SOCKADDR_IN ser_addr;
    ser_addr.sin_family = AF_INET;
    ser_addr.sin_port = htons(30000);
    ser_addr.sin_addr.S_un.S_addr = ADDR_ANY;

    if (bind(ser_sock, (SOCKADDR*)&ser_addr, sizeof(ser_addr)) == SOCKET_ERROR) {
        cout << "bind fail" << WSAGetLastError() << "\n";
    }


    if (listen(ser_sock, SOMAXCONN) == SOCKET_ERROR){
        cout << "listen fail" << WSAGetLastError() << "\n";
    }

    // accept();  클라이언트가 접근을 안 하면 무한정 대기상태로 빠짐
    // WSAAsyncSelect(); 윈도우 폼 이용할때 비동기 식으로 처리함

    // 스레드 개념 배우기
    // 

    WSACleanup();

}

1.소켓을 당연히 먼저 연결 하고 그 다음 노드를 찾고 연결하는 기능을 추가해야 하는건가.... (소켓연결 후 > 노드찾는 기능 + 연결 기능 구현 )

2.노드찾고 연결하는 기능을 바로 구현해서 통신을 하게 해야 하는건가 ??? 감이 잘 잡히지가 않네요 (그냥 바로 > 노드찾는 기능 + 연결기능)

인터넷에 p2p 튜토리얼을 찾아 봤는데 없더라구요...

대부분 Server/Client 만 있고 조금이라도 언지를 주시면

제가 이것저것 알게되서 만들수도 있으니 선배님들의 지식이 필요합니다.ㅠㅠ

저도 분산원장 원리는 알고있지만 막상 네트워크적으로 통신하면서 만들려고하니까

생각보다 어렵네요ㅠㅠ 이론과 코딩의 괴리감이랄까요..

  • (•́ ✖ •̀)
    알 수 없는 사용자
  • p2p 를 구현하고 싶은데 winsock 코드라...너무 멉니다. 일단 기본공부에 충실하세요. 꼭 c++에 winsock 으로 할 필요도 없으니 좀 더 구현에 수월한 언어들 예를들어 java, go, python 같은 gc나 쓰레드를 언어차원에서 지원하는 언어들로 소켓을 학습하는 것도 좋겠습니다. 물론 네트워크 기본지식은 있어야 합니다. 튜터리얼? 그런것이 있을 수가 없습니다. p2p는 간단하게 구현할 수 있는 것이 아니고 방법도 다양합니다. 실구현체를 보고 싶으면 github에서 검색해보면 제법 나옵니다. 서적은 http://www.yes24.com/Product/Goods/278479?scode=032&OzSrank=5 서적이 한권있고 저도 소장하고 있는 서적이나 그다지 얻을건 없습니다. 중요한 부분들 예를들면nat 우회, 홀펀칭 기법등이 안나옵니다. 서적은 절판되었을것이고 도서관을 이용해보세요. 정영훈 2019.12.8 03:13
  • 댓글 달아주셔서 감사합니다!! Winsock은 기능들이 너무 제한적이라 저같은 초보에겐 힘들다고 보시는군요ㅠㅠ!! 알 수 없는 사용자 2019.12.8 13:24
  • 제한적인 것이 아니라 c/c++ 로 프로그래밍을 해야 하고 winsock api 는 너무 구체적이라 어렵습니다. 추상도가 높은 네트워크 api 를 제공하는 자바나 c#, python 같은 언어로 구현하는게 훨씬 편합니다. 즉 학습하고 구현하기 용이한 플랫폼과 도구를 선택하라는 겁니다. 정영훈 2019.12.8 18:33
  • 답변 정말 감사합니다!!!ㅠㅠ 알 수 없는 사용자 2019.12.9 10:37

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)