2010-05-20 8 views
0

TCP/IP를 통해 메시지를 보내고 다른 쪽에서는 TCP 메시지를 구문 분석합니다. 예를 들어 보낸 메시지 중 하나입니다.XML을 사용하는 TCP 메시지 구조

$DKMSG(requestType=REQUEST_LOGIN&requestId=123&username=metdos&password=123)$EDKMSG 

명확한 설명 :

$DKMSG(  //Start 
)$EDKMSG  //End 
requestType //Parameter 
REQUEST_LOGIN //Parameter Value 

지금 나는 또한 내 메시지에 XML 파일을 추가 할. 나는이 옵션을 고려 중이 야 : 그것은 바로 내 보이지 않는다

1) :

$DKMSG(requestType=REQUEST_LOGIN&xmlData= 
<Item id="[email protected]" type="SIGNAL"> 
<Label> 
<Text>56D</Text> 
<X1>10</X1> 
<Y1>40</Y1> 
<RotateAngle>90</RotateAngle> 
</Label> 
<X1>0</X1> 
<Y1>20</Y1> 
<Width>35</Width> 
<Height>10</Height> 
<Source>sgs3lr</Source> 
</Item> 
)$EDKMSG 

이 방법에 문제가 있습니다.

2) 나는 delimeter "="를 훨씬 더주의 깊게 다루어야하는데 그렇지 않으면 매개 변수를 변경해야합니다.

귀하의 제안에 감사드립니다.

답변

1

이것은 자생 형식입니다. JSON, XML, 프로토콜 버퍼 또는 Bast (심지어는 형식을 사용하는 RPC 프로토콜을 지정하는 Bert)와 같은 바로 사용하지 않는 것을 사용해야합니다. 이 형식은 모두 여러 언어로 작성된 파서를 가지고 있으며 모두 C++에서 지원됩니다.

+0

올바르게 이해하면 전체 메시지에 대해 XML 파일을 보내고 xmlData를이 Xml 파일의 하위로 사용하는 것이 좋습니다. – metdos

+0

사실 저는 XML에 병리학 적 혐오감을 가지고 있습니다. 그래서 XML에 비해 다른 형식을 선호 하겠지만 그렇습니다. 이것이 일반적인 생각입니다. –

1

당신은 깨끗하고 잘 분석하는 것으로 이해하고 쉽게 HTTP, 모방 할 수 있습니다 질문 2

LOGIN DKMSG/1.0 
request-id: 123 
username: metdos 
password: eNcrYpTED 
content-type: text/xml 
content-length: 237 

<Item id="[email protected]" type="SIGNAL"> 
<Label> 
<Text>56D</Text> 
<X1>10</X1> 
<Y1>40</Y1> 
<RotateAngle>90</RotateAngle> 
</Label> 
<X1>0</X1> 
<Y1>20</Y1> 
<Width>35</Width> 
<Height>10</Height> 
<Source>sgs3lr</Source> 
</Item> 
1

그냥 실제적인 대답을 : 가능성이 $ XMLDATA에서 데이터를 캡슐화하는 것입니다 (...) $ EXMLDATA, 그래서 당신은 심지어 XML에 의존하지 않습니다. 기존 확인 : 마르셀에서 언급 한 바와 같이, 새로운 프로토콜을 소개

XMLRPC, TCP 프로토콜에 대한 SOAP

1

을 정말 생각의 두 학교가있다. Vijay가 제안한 것처럼 MIME 헤더를 사용합니다. 다른 하나는 이진 길이 접두사가 붙은 문자열을 사용합니다. 길이 접두사가 붙은 문자열은 텍스트 형식보다 훨씬 효율적으로 처리 할 수 ​​있으며 모호성을 제거하기 위해 특수 문자를 인코딩 할 필요가 없습니다. 단점은 Telnet 클라이언트를 사용하여 대화 할 수없는 서버입니다.

+0

Ben Voigt에게 : 왜 "단점은 Telnet 클라이언트를 사용하여 말할 수없는 서버"입니다. 나는 정말로 혼란 스럽다. – Brent81

1

이 제안 사항은 어떻습니까?

  • 는 다른 속성 "contentType이"

그런 다음 "ContentType을"사용하여 데이터 형식을 지정하고 "내용"에 실제 데이터를 넣어 추가 "콘텐츠"와 "XMLDATA"

  • 를 교체합니다. 데이터 형식 (contentType)의 경우 Base64는 실제 데이터에 부과하는 오버 헤드를 고려하여 데이터가 너무 길지 않은 경우 매우 좋은 후보가 될 수 있습니다.

  • 1

    XML이 트리이고 재 루팅 될 수 있다는 사실을 사용하십시오. 원본 MXL과 함께 보내고 자하는 정보는 새 XML 루트에 attibutes로 추가 할 수 있습니다.

    <DKMSG requestType="REQUEST_LOGIN"> 
        <Item id="[email protected]" type="SIGNAL"> 
        <Label> 
        <Text>56D</Text> 
        <X1>10</X1> 
        <Y1>40</Y1> 
        <RotateAngle>90</RotateAngle> 
        </Label> 
        <X1>0</X1> 
        <Y1>20</Y1> 
        <Width>35</Width> 
        <Height>10</Height> 
        <Source>sgs3lr</Source> 
        </Item> 
    </DKMSG> 
    
    관련 문제