PHP Sockets을 사용하여 네트워크 연결을 통해 PHP 스크립트에서 C#으로 JSON 메시지를 보내려고합니다.길이가 앞선 소켓 데이터 보내기
Usually, for binary protocols, 모든 메시지의 처음 4 바이트는 메시지의 길이 (몇 바이트)를 나타내는 정수 여야합니다.
는 C#에서 나는 다음과 같이 메시지의 길이를 알려주는 정수로 모든 메시지를 접두사 :
byte[] msgBytes = UTF8Encoding.UTF8.GetBytes("A JSON msg");
byte[] prefixBytes = BitConverter.GetBytes(msgBytes.Length);
byte[] msgToSend = new byte[prefixBytes.Length + msgBytes.Length];
Buffer.BlockCopy(prefixBytes, 0, msgToSend, 0, prefixBytes.Length);
Buffer.BlockCopy(msgBytes, 0, msgToSend, prefixBytes.Length, msgBytes.Length);
내가 알고있는 것처럼
, PHP에서 함수 socket_send는 문자열을 받아들입니다. 그렇다면 PHP 5.x에서 같은 접두사를 사용하려면 어떻게해야합니까?업데이트 : 네트워크 소켓에서받은 경우 이러한 접두사가 붙은 데이터를 처리하는 방법에 대해 follow-up question 게시했습니다.
것은 왜 "N"(빅 endian 바이트 순서)를 사용하는 : 여기
은 예입니다? – Mike@Mike : 여기에 해당 유형이있는 .Net 제품 설명서를 참조하십시오. 아마 32 비트 부호있는 정수, 엔디안은 컴퓨터에 따라 다릅니다. 또한 사용중인 프로토콜의 사양을 확인하십시오. 그래서'L','N'과'V'는 잘못 될 가능성이 있습니다. (제 대답에도 그것들을 사용하고있는 사양으로 다시 확인해야합니다). – hakre
@hakre 귀하의 도움에 감사드립니다. C# 응용 프로그램이 리틀 엔디안을 사용하는 것 같습니다. 'V'가 가장 좋은 옵션이되어야합니다. 맞습니까? – Mike