이전에 NetworkComms  을 이용해 윈도우 프로그램을 만든적이 있었습니다.

여기에 Xamarin.Android 프로젝트를 이용해

앱을 만들어 보았는데 생각보다 거침없이?? 되더군요^^

기본 설명과 소스는 아래 깃헙 주소에 있습니다.

https://github.com/kjundev/NetworkComms.Chat

 

아래와 같이 안드로이드 및 윈도우 프로그렘간에 메세지를 주고 받을 수 있습니다.

 

실행방법은 간단합니다.

1. IP, Port 를 넣고 서버를 구동합니다. (CommsService)

2. 방화벽 해제가 필요하면 해제합니다.

3. 클라이언트를 실행합니다. > 윈도우용(CommsClient), 안드로이드용(CommsApp)

  - 서버의 IP 와 Port 를 입력하고 사용자명 입력후 Connect 합니다.

   (안드로이드는 사용자 명이 Android 로 고정) 

4. 메세지를 전달합니다.

1. 소개

- 고성능 네트워크 기능을 이용해 .Net 제품에 사용가능 하도록 개발된 라이브러리
- 여러 플랫폼에서 통신이 가능
- 자체적인 API 를 제공, 오픈 소스
  https://github.com/MarcFletcher/NetworkComms.Net

- 통신 방식, 암호화 방법, 직렬화 방식을 선택가능
- But.. 2014년 3월 29일 3.0.0 이 마지막 버전.
  http://www.networkcomms.net/

 

2. 기능

- 1Gbpa 이상의 데이터 속도로 1000개 이상의 연결 지원
- Net2 +, Mono, Unity3d, Xamarin.iOS, Xamarin.Android, Windows Phone 8, Windows RT 등의 다양한 플랫폼 지원
- UDP, TCP 및 블루투스 지원

************************************
Server to Clients – One to Many
Peer to Peer – Many to Many
Cloud to Client – Many to One
************************************

 

3. 적용 - 서버

- 서버만들기 (Receive)

// 들어올 메세지 형식을 정의합니다.
NetworkComms.AppendGlobalIncomingPacketHandler<string>("Message", ReceiveMessage);

// 통신방식을 지정하고 서버를 시작합니다.
Connection.StartListening(ConnectionType.TCP, new System.Net.IPEndPoint(System.Net.IPAddress.Any, port));

// 메시지가 들어온 경우 처리 로직을 작성합니다.
 private static void ReceiveMessage(PacketHeader header, Connection connection, string message)
{
}

=> Server 를 중지하고자 할 때
// Server 를 중단합니다.
NetworkComms.Shutdown();

- 서버만들기 (Receive $ Reply)

// 들어올 메세지 형식을 정의합니다.
NetworkComms.AppendGlobalIncomingPacketHandler<string>("Message", ReceiveReplyMessage);

// 통신방식을 지정하고 서버를 시작합니다.
Connection.StartListening(ConnectionType.TCP, new System.Net.IPEndPoint(System.Net.IPAddress.Any, port));

// 메시지가 들어온 경우 처리 로직을 작성합니다.
 private static void ReceiveReplyMessage(PacketHeader header, Connection connection, string message)
{
        // 다시 전달할 메시지를 정의하여 보냅니다.
 connection.SendObject<string>("ReturnMessage", “Server Send”);
}

 

4. 적용 - 클라이언트

- 클라이언트 만들기 (Send)

// 메시지를 전달합니다. 마지막인자가 전달할 메시지 내용입니다.
NetworkComms.SendObject<string>("Message",serverIp, serverPort, “content");

 

- 클라이언트 만들기 (Send & Receive)

// 메시지를 전달하고 서버에서 결과를 받습니다.
String receivedData = NetworkComms.SendReceiveObject<string, string>( “Message”,serverIp, serverPort, “ReturnMessage”, 1200, “content”);

* “Message”             : 보낼 데이터에 대한 키 정보입니다.
* “ReturnMessage”    : 받을 데이터에 대한 키 정보입니다.
* 1200                    : timeout(millisecond)


5. 적용 - 직렬화

DataSerializer serializer = DPSManager.GetDataSerializer<JsonSerializer>();
// 지정된 serializer를 사용하도록 기본 보내기 수신 옵션을 설정합니다. // 이전 기본값에서 DataProcessors 및 Options 유지
NetworkComms.DefaultSendReceiveOptions = new SendReceiveOptions(serializer, NetworkComms.DefaultSendReceiveOptions.DataProcessors, NetworkComms.DefaultSendReceiveOptions.Options);

* ProtobufSerializer, JsonSerializer, NullSerializer, BinaryFormaterSerializer

6. 적용 - 암호화

// 암호화 키를 지정합니다.
RijndaelPSKEncrypter.AddPasswordToOptions(NetworkComms.DefaultSendReceiveOptions.Options, "kjun");
// RijndaelPSKEncrypter 데이터 프로세서를 sendReceiveOptions에 추가합니다
NetworkComms.DefaultSendReceiveOptions.DataProcessors.Add(DPSManager.GetDataProcessor<RijndaelPSKEncrypter>());

* Rijndael : 미국 NIST가 차세대 암호화표준으로 선정한 알고리즘

 

7. 장단점

- 장점

접근이 쉽다.
네트워크 세부 기술을 몰라도 된다.
코드가 간단하다.
통신에 필요한 api 가 있어 암호화 및 직렬화 처리에 용이 하다.
UDP 가 지원된다.

- 단점

http 가 불가능하다.
내부 네트웍크 용으로만 적합하다.
구글링 하면 많이 안 나온다.
모두 코드로 구현해야 한다.
.NET 에 제한적이다.

 

8. 참고사이트

Forum  http://www.networkcomms.net/network-library-support/
Xamarin https://components.xamarin.com/view/NetworkComms.Net

 

9. Test Program

서버 동작 후 클라이언트 여러대를 띄워 채팅 가능하도록 만듦

K.zip

 

 

 

 


 

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

(.NET) Linq Merge - 링크  (0) 2017.04.28
(Bitbucket) commit 이 느려진 경우 처리방법  (0) 2017.04.28
(.NET) NetworkComms  (0) 2017.04.28
(.NET) 방화벽 해제 Code  (0) 2017.04.28
(.NET) networkcomms  (0) 2017.04.21
(.NET) Animator for WinForms  (0) 2017.04.18
http://www.networkcomms.net/how-to-create-a-client-server-application-in-minutes/

 

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

(.NET) NetworkComms  (0) 2017.04.28
(.NET) 방화벽 해제 Code  (0) 2017.04.28
(.NET) networkcomms  (0) 2017.04.21
(.NET) Animator for WinForms  (0) 2017.04.18
(펌) 색상추출프로그램  (0) 2017.04.17
(.NET) 윈폼 이벤트  (0) 2017.04.15

+ Recent posts

티스토리 툴바