noVNC란 브라우져에서 PC를 원격으로 제어하는 브라우저 VNC라고 생각하면 된다.

작동원리는.. 정확하진 않지만 아마 이런 그림일 것이다.



noVNC 서버는 Python, Nodejs 등 여러 언어를 지원하며 MPL-2.0 라이센스이다.

자세한 내용은 아래 noVNC 사이트에서 확인 가능하다.

noVNC 클라이언트 출처 : https://kanaka.github.io/noVNC/

noVNC 서버 "Websockify" 출처 : https://github.com/novnc/websockify


*사용 방법

nodejs를 이용한 noVNC 사용법을 소개하려한다.


1. websockify.js를 node.js로 실행 (node.js 실행 방법은 인터넷을 찾아보자)


github Websockify(noVNC Server) 프로젝트에 들어가서 소스를 다운받아 압축 해제

"other -> js -> websockify.js"라는 파일이 있다.


node.js를 처음 설치 후 websockify.js를 실행하면 여러가지 모듈이 설치가 안되 실행이 되지 않을 수 있다.

다음과 같은 모듈들을 설치 후 다시 시도해 보자

"optimist", "policyfile", "ws" 모듈을 설치 후 다시 시도하면 다음과 같은 모습을 볼 수 있다.

모듈 설치 방법은 npm을 이용해 설치하면된다. ex) "npm install optimist"

"node websockify.js 6080 서버PC의 IP:5900"를 입력하면 다음과 같이 서버가 실행되는 모습을 볼 수 있다.

여기서 6080은 Browser와 websockify서버가 통신을 할때 사용할 port를 의미 하고,

서버PC의 IP는 websockify서버가 실행될 pc의 IP를 의미한다.

5900은 websockify서버와 vnc서버(real, ultra 등등)가 통신을 할때 사용하는 port를 의미한다.


2. vnc.html 실행

github noVNC(noVNC Client) 프로젝트에 들어가서 소스를 다운받아 압축 해제

"noVNC-master -> vnc.html"라는 파일이 있다.

vnc.html을 더블클릭하여 브라우저에 띄우게 되면 다음과 같은 화면이 나타난다.

톱니바퀴 모양의 Setting과 자물쇠? 쇠사슬? 모양의 Connection을 설정 후 noVNC를 접속해보자.


톱니바퀴 모양

 Path를 localhost:5900으로 설정한다.

 Host를 localhost로 Port를 6080으로 설정 후 Connect버튼을 클릭하면!

여기서 localhost는 websockify 서버pc의 ip를 의미합니다.

.

.

.

.

.

.

.

.

짜란! 끗!

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

HMAC SHA-256 암호화 (C#, Javascript, Nodejs)  (2) 2018.08.28
[C#]텔레그램 봇 만들기  (2) 2017.01.05
noVNC  (0) 2017.01.02

압축 알고리즘 선택 기준 : http://bspfp.pe.kr/192 참조


Snappy 개요 : http://www.mimul.com/pebble/default/2012/04/10/1334044735206.html 참조


Snappy 사용법


1. Nuget에서 Snappy를 검색하여 Snappy for .NET을 설치한다.

2. using Snappy;


 
//압축된 내용
byte[] byteCompressed = null;
//압축 해제 된 내용
byte[] byteDeCompressed = null;

Stream stream = null;

ulong ulJsonLength = 0;

byteCompressed = File.ReadAllBytes("FilePath");

byteDeCompressed = SnappyCodec.Uncompress(byteCompressed);

stream = new MemoryStream(byteDeCompressed);

// stream에 담아 지지고볶고 사용 하면 된다.
// ** 해당 내용은 압축 해제를 다룬 내용.
// ** 압축은 위의 소스를 조금만 수정하여 사용하면 될듯 하다.


* Snappy 함수들


함수가 많지 않다. 압축과 압축 해제는 Compress, Uncompress 함수를 사용하면 된다. 단순히 byte[] 만 넣어주면 알아서 압축과 해제를 해주니 사용하기는 간단하다.

'Programming > C#' 카테고리의 다른 글

[C#] 네이버 자동 로그인 / 카페 글쓰기 API  (9) 2019.11.01
[C#]ini file 사용법 & 소스 공유  (3) 2017.01.03
[C#]Log4Net 사용법  (2) 2017.01.03
[C#]Snappy 사용법  (5) 2016.12.30
[C#]DataTable Sorting 간단 사용법  (0) 2016.12.30
  1. 2018.01.12 16:50

    비밀댓글입니다

  2. 보초섭 2018.01.12 16:52

    안녕하세요?
    블로그에 올리신 Google Snappy로 데이터 압축하기를 보고
    C#으로 코드를 작성해 보았는데
    너무 간단한 것 같아 맞는지 해깔려 이렇게 댓글 답니다.
    혹시 고칠 점이 있는지 봐주시면 감사하겠습니다.


    using Snappy;

    public class Snappy_ex : MonoSingleTon<Snappy_ex>
    {
    //Google Snappy 패킷 압축, 해제
    public byte[] DataCompressed = null;
    public byte[] DataUnCompressed = null;
    MemoryStream stream = null;

    //패킷 압축
    public void Compression(byte[] data)
    {
    DataCompressed = SnappyCodec.Compress(data);
    }

    //패킷 압축 해제
    public void UnCompressed(byte[] data)
    {
    data = DataCompressed;
    DataUnCompressed = SnappyCodec.Uncompress(data);
    stream = new MemoryStream(DataUnCompressed);
    }
    }

  3. 라이브러리가 생각보다 간단해서 저도 당황햇엇던 기억이 나네요. 딱히 고칠 점이 잇는지는 모르겟습니다. 워낙 간단해서 그대로 쓰셔도 무방할 것 같습니다. 다만 compression 함수에 memorystream을 안쓴건 일부러 그러신거겟져

    • 보초섭 2018.01.12 21:29

      아 그럼 이런식으로 해야하는 건가요?

      //패킷 압축
      public void Compression(byte[] data)
      {
      DataCompressed = SnappyCodec.Compress(data);

      stream = new MemoryStream(DataCompressed);

      }

  4. 보통은 메모리스트림이나 파일스트림에 넣어서 사용하죠 물론 목적에 따라 달라지겟지만요

Index라는 컬럼을 가진 DataTable이 있을때 Index로 Sorting을 하고싶다면 다음과 같이 사용하면 된다.

DataTable dt;
//Columns add ... 
//Rows add ...
dt.DefaultView.Sort = "index desc";

desc : 내림차순

asc : 올림차순


* Sotring 후 그냥 dt를 사용 할경우 Sorting된 값을 사용할 수 없다. dt.DefaultView를 사용 해야 Sorting된 값을 확인 할 수 있다.


tip

Sorting 후 key값의 index를 알고싶을때는 find 함수를 사용하면 된다.

예를 들어 Index라는 컬럼이 Datatable의 key값일 경우

dt.DefaultView.Sort = "index desc";
//20이라는 index의 Row를 알고싶을 경우
int nRow = dt.DefaultView.find(20);
//nRow를 사용하면 된다.
//find에서 찾는 값이 없을 경우 -1을 리턴하니 참고하길
//Row를 찾았으니 이제 해당 row의 값을 가져오는 방법을 알아보자
//Datatable에 Name이라는 컬럼이 있다고 한다면 아래와 같은 방법으로 사용가능하다.
string Student_Name = dt.DefaultView[nRow]["Name"].ToString();
//....


'Programming > C#' 카테고리의 다른 글

[C#] 네이버 자동 로그인 / 카페 글쓰기 API  (9) 2019.11.01
[C#]ini file 사용법 & 소스 공유  (3) 2017.01.03
[C#]Log4Net 사용법  (2) 2017.01.03
[C#]Snappy 사용법  (5) 2016.12.30
[C#]DataTable Sorting 간단 사용법  (0) 2016.12.30

기본적인 사용법은 teayo에서 보고 습득


간략하게 사용순서를 설명하자면 이렇다.

1. 프로젝트 생성

2. Nuget에서 SignalR 설치

3. Startup Class생성

4. Hub Class 생성

5. javascript에서 signalr 연결 후 사용


tip

1. callback기능이 가능하다. asp.net forum에 잘 나와있다.

2. Comet 방식을 선택할 수 있다. https://www.asp.net/signalr/overview/getting-started/introduction-to-signalr 참조

* 해당 이미지는 https://www.asp.net/signalr/overview/getting-started/introduction-to-signalr 발췌 하였습니다.


+ Recent posts