2013-12-09 3 views
0

주어진 환경에서 다른 시스템의 TCP 데이터 그램을 허용하는 서버 앱을 프로그래밍해야합니다. 이러한 메시지는 메시지 유형의 유한 목록 일 수 있습니다. 예를 들어 새 인벤토리 (새 품목 레코드), 인벤토리 위치 변경 (인벤토리가 현재 위치 X), 이전 요청 (인벤토리 ID XYZ를 위치 X에서 위치 Y로 이동하십시오)과 같은 몇 가지 예가 있습니다.TCP 소켓 (서버) 디자인

제 질문은 데이터 그램에 어떤 유형의 식별자가 있어도 어떤 유형의 메시지인지 명시 할 필요가 없도록 인바운드 메시지 유형마다 소켓 (포트 번호)을 설정하는 것이 좋습니다. 내가 처리 할 수 ​​있도록 메시지의 형식을 알려주시겠습니까?

.NET에서 Sever를 작성하고 있지만 TCP 메시지의 보낸 사람은 기존의 비.NET 시스템입니다. 내 계획은 추가 처리를 위해 메시지를 MSMQ에 저장하는 비동기 서버를 설정하는 것입니다. (http://msdn.microsoft.com/en-us/library/fx6588te(v=vs.110).aspx)

+0

이렇게하면 매우 이상한 * 방법 일 것입니다. 대부분의 클라이언트가 하나 이상의 메시지 유형을 보내야한다고 가정 할 때 소켓 오버 헤드가 더 많이 필요합니다. 그렇게하지 않겠습니다. –

+0

이렇게하면됩니다. 라우터에서 UDP 패킷의 경로를 변경해야한다고 가정합니다. 라우터의 비밀스럽고 건전한 명령 인터페이스와 얼마나 오랫동안 상호 작용하고 싶습니까? 하나의 포트가 충분합니다 .. –

+1

@Martin eugh - 메시지를 추가 할 때마다 방화벽 변경 : 내 시스템 관리자는 혈액 지불을 요구할 것입니다. –

답변

0

내가 작성한 응용 프로그램은 여러 대의 장치와 통신하며 그 중 하나만 PC 서버이고 나머지는 PLC가 제조에 사용됩니다. 각 송/수신시 포트가 열리고 닫힙니다. PC 서버에 3 개의 다른 TCP 메시지를 보낼 때 공통 포트를 사용하여 PC 서버 및 기본 송신 포트 (.NET Framework에서 선택)에서 오는 다른 TCP 메시지를 수신했습니다. PLC의 경우, 설계 상 TCP 메시지 (각 메시지 유형별로 하나의 전용 포트 [서로 다른 포트])와 각 메시지 유형을 전송하는 전용 포트를 수신하기 위해 전용 포트 (열려 있던 상태)를 사용해야했습니다. PLC가 고정 된 포트 번호 (다시 말하면, 각 포트는 열어 두어야했습니다)에 바인딩하려고하기 때문에.

도움 주셔서 감사합니다. 이것은 내 첫 번째 TCP 응용 프로그램이었고, 뒤돌아 보면 상당히 복잡했습니다 (다음 번에는 전 세계 응용 프로그램을 시작할 것입니다!). 이제는 뜨거운 밀에서 냉각 마당으로 훔치는 30 톤의 역할 (즉, 1,500도)을 움직이는 120 톤의 레일 크레인이 있습니다. 모든 장치 사이의 통신, SQL Server 및 VB Windows 서비스는 잘 작동합니다. 그리고 그들은 VB가 두 번째 속도 언어라고 말합니다!).

0

기존 시스템으로 작업하는 경우 message protocol이 무엇인지 파악하고 기존 시스템에서 사용하는 방식대로 해석해야합니다. 소켓으로 작업하는 모든 프로그램은 메시지가 될 규칙에 대해 "규칙"을 가지고 있으므로 규칙이 무엇인지 알아 내고 서버 소프트웨어가 규칙을 따라야합니다.

서버 소프트웨어가 여러 유형의 시스템과 통신해야하는 경우 시스템 유형마다 다른 포트를 사용하지만 시스템 유형마다 다른 유형의 포트를 사용할 수 없습니다. 새로운 디자인에 맞는 "메시지 프로토콜".

+0

답장을 보내 주셔서 감사합니다. 다른 사람들이 내 생각을 실제로 확인하는 데 큰 도움이됩니다. 필자는 전에 소켓 레이어 통신을 프로그래밍 해본 적이 없었 습니다만, 저는 보통 이런 유형의 통신보다 뛰어납니다. 여러분의 (Marc and Martin 's) 관점은 매우 유용합니다. 나는 메시지를 프레임 화하는 방법을 알아야한다는 것을 배웠다. 좋은 시간들. 나는 SQL Server 개발에 전념 할 수 있으면 좋겠다. 이 메시지를 처리 ​​할 수 ​​있도록 이러한 메시지를 얻는 최선의 방법을 알아야합니다. (필자가 쓰는 데 사용하는 코드입니다.) – Christopher

+0

새로운 것들을 프로그래밍하면서 기존의 것들을 사용하지 않으려 고한다면 소켓을 완전히 피하고 추상화 계층을 제공하고 모든 메시지 프레임과 기타 등등을 처리하는 라이브러리를 함께 사용하는 것이 좋습니다. .NET에 내장 된 [WCF 라이브러리] (http://msdn.microsoft.com/en-us/library/ms731082%28v=vs.110%29.aspx)는 좋으며 타사 라이브러리가 많이 있습니다. 거기도. –