>  기사  >  백엔드 개발  >  proto: 잘못된 Wire 형식 데이터를 구문 분석할 수 없습니다.

proto: 잘못된 Wire 형식 데이터를 구문 분석할 수 없습니다.

WBOY
WBOY앞으로
2024-02-06 10:57:04829검색

proto: 잘못된 Wire 형식 데이터를 구문 분석할 수 없습니다.

질문 내용

저는 protobufs를 처음 접했고 현재 nats 서버에서 데이터를 읽는 클라이언트를 작성하고 있습니다. nats 서버에서 전송되는 데이터는 protobuf입니다.

제가 작성하고 있는 클라이언트는 go로 작성되었습니다. 이것은 제가 작성한 .proto 파일입니다:

으아아아

게시 서버는 C#으로 작성되었으며 원본 메시지의 코드는 다음과 같습니다.

으아아아

데이터를 비정렬화하려고 할 때 이 오류가 발생합니다

으아아아

데이터를 구문 분석하는 방법은 다음과 같습니다.

으아아아

서버에서 받은 샘플 바이트 데이터:

으아아아

자세한 내용 추가:

C#이 데이터를 보내는 방법은 다음과 같습니다.

으아아아

feedmessage의 구조입니다(executionreport도 이를 간접적으로 상속합니다)

으아아아

이것이 serializetoarray() 작동 방식입니다:

으아아아

구체적인 이유는 모르겠습니다. 그런데 제가 작성한 프로토파일이 잘못된 것 같습니다. 동일한 오류가 발생하여 여러 게시물을 검토했지만 대부분은 동일한 문제를 해결하지 못했습니다. 다른 세부정보가 필요하면 알려주시기 바랍니다.

이 문제를 해결하도록 도와주세요.


정답


댓글에서 논의된 내용을 바탕으로 데이터 정리에 성공했습니다.

Notes:

  1. 데이터 앞에 5바이트가 붙습니다(완전히 불필요함).
    • 메시지 유형 1바이트
    • 데이터 길이는 4바이트
  2. c# 구현은 decimalguid 数据类型。 (正如 bcl.proto에 설명된 대로 c# 관련 구현을 사용합니다. 크로스 플랫폼 코드에서는 일반적으로 이를 완전히 피해야 합니다.

폴더 구조는 다음과 같습니다.

으아아아

bcl.proto:

이 파일은 github에서 복사되었습니다. com/protobuf-net/protobuf-net. 이는 .net 구현이 원본 파일에서 decimalguid을 사용하기 때문에 필요합니다.

으아아아

execution.proto

으아아아

프로토타입/

이 폴더의 파일은 다음 명령을 사용하여 proto 파일에서 생성됩니다.

으아아아

go.mod

으아아아

main.go

으아아아

질문에 제공된 데이터 출력:

으아아아

위 내용은 proto: 잘못된 Wire 형식 데이터를 구문 분석할 수 없습니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 stackoverflow.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제