소켓을 통해 C #에서 Java로 문자열을 바이트 배열로 보내기

마이클 IV

다음을 시도하고 있습니다.

C # 클라이언트 :

    string stringToSend = "Hello man";
    BinaryWriter writer = new BinaryWriter(mClientSocket.GetStream(),Encoding.UTF8);

    //write number of bytes:
    byte[] headerBytes = BitConverter.GetBytes(stringToSend.Length);
    mClientSocket.GetStream().Write(headerBytes, 0, headerBytes.Length);
    //write text:
    byte[] textBytes = System.Text.Encoding.UTF8.GetBytes(stringToSend);
    writer.Write(textBytes, 0, textBytes.Length);

자바 서버 :

   Charset utf8 = Charset.forName("UTF-8");
   BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream(), utf8));

   while (true) {
       //we read header first
      int headerSize = in.read();
      int bytesRead = 0;
      char[] input = new char[headerSize];

      while (bytesRead < headerSize) 
      {     
         bytesRead += in.read(input, bytesRead, headerSize - bytesRead);
      }
            String resString = new String(input);
            System.out.println(resString);


       if (resString.equals("!$$$")) {
                break;
       }
   }

문자열 크기는 9와 같습니다. 양쪽 모두 정확하지만 Java 쪽에서 문자열 자체를 읽을 때 데이터가 잘못 보입니다. char 버퍼 ( 'input'변수) 내용은 다음과 같습니다.

",",",'안녕하세요',''

바이트 배열을 뒤집어 엔디안을 변경하려고했습니다. 또한 ASCII와 UTF-8 사이의 문자열 인코딩 형식을 변경해 보았습니다. 여전히 엔디안 문제와 관련이있는 것처럼 느껴지지만 해결 방법을 알 수 없습니다. 스팀에 텍스트 데이터를 쓰기 위해 다른 유형의 작성자가 있지만 학습을 위해 원시 바이트 배열을 사용하려고합니다.

Sotirios Delimanolis

이들

byte[] headerBytes = BitConverter.GetBytes(stringToSend.Length);

4 바이트입니다. 그리고 그들은 문자 데이터가 아니므로 BufferedReader. 바이트를 직접 읽으십시오.

byte[] headerBytes = new byte[4];
// shortcut, make sure 4 bytes were actually read
in.read(headerBytes);

이제 텍스트 길이를 추출하고 충분한 공간을 할당하십시오.

int length = ByteBuffer.wrap(headerBytes).getInt();
byte[] textBytes = new byte[length];

그런 다음 텍스트를 읽으십시오

int remaining = length;
int offset = 0;
while (remaining > 0) {
    int count = in.read(textBytes, offset, remaining);
    if (-1 == count) {
        // deal with it
        break;
    }
    remaining -= count;
    offset += count;
}

이제 UTF-8로 디코딩하십시오.

String text = new String(textBytes, StandardCharsets.UTF_8);

그리고 당신은 끝났습니다.

엔디안은 처음 4 바이트와 일치해야합니다. 이를 확인하는 한 가지 방법은 "네트워크 순서"(big-endian)를 사용하는 것입니다. 그래서:

C # 클라이언트

byte[] headerBytes = BitConverter.GetBytes(IPAddress.HostToNetworkOrder(stringToSend.Length));

자바 서버

int length = ByteBuffer.wrap(headerBytes).order(ByteOrder.BIG_ENDIAN).getInt();

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

소켓을 통해 jSON 배열의 길이 보내기 (Java에서 Python으로)

소켓을 통해 Java에서 Python으로 고정 길이 배열 보내기

소켓을 통해 C ++에서 Java로 Mat 객체 보내기

Java의 소켓을 통해 바이트 대신 문자열 보내기

Java 프로그램에서 C 프로그램으로 소켓을 통해 데이터 보내기

소켓을 통해 이미지를 바이트로 보내기

Java의 웹 소켓을 통해 XML 문서 및 JSON을 바이트로 보내기

소켓을 통해 Java 클라이언트에서 c 서버로 int 쓰기

자바에서 소켓을 통해 문자열을 보내는 문제

소켓을 통해 다중 바이트 배열 보내기

소켓 C#을 통해 base64 문자열 보내기

소켓을 통해 C ++ 서버에서 Python 클라이언트로 데이터를 보내는 문제

소켓을 사용하여 Python (클라이언트)에서 C ++ (서버) 배열로 데이터 보내기

자바 문자열을 c / c ++ 바이트로 보내기

Swift 클라이언트에서 Java 서버로 소켓 출력 스트림을 통해 메시지 보내기

소켓을 통해 문자열 보내기 (파이썬)

VB.NET에서 소켓을 사용하여 TCP를 통해 바이트 배열 보내기

소켓을 통해 PC에서 Android로 파일 보내기

소켓을 통해 Java에서 CPP로 스크린 샷 보내기-이미지 수신 문제

자바 / 안드로이드 : 소켓을 통해 바이트 배열 읽기 / 쓰기

안드로이드의 소켓을 통해 자바 서버로 더미 데이터 보내기

소켓 연결을 통해 클라이언트에서 서버로 이미지 보내기

\x 문자열을 바이너리로 변환하고 소켓을 통해 보내는 방법

Go에서 C로 바이트 배열을 보내는 방법

Android 기기에서 서버 소켓으로 해시 된 바이트 배열을 전송하고 저장

자바에서 소켓을 통해 객체 보내기

자바 프로그램에서 C ++로 바이트 배열 보내기

주기적으로 봄 웹 소켓을 통해 클라이언트에 메시지를 보내기

c의 소켓을 통해 원자 적으로 정수 보내기

TOP 리스트

  1. 1

    PrematureCloseException : 연결이 너무 일찍 닫혔습니다.

  2. 2

    MDRotatingPieChart를 회전하면 각도 대신 x / y 위치가 변경됩니다.

  3. 3

    c # 웹 사이트에서 텍스트를 복사하는 방법 (소스 코드 아님)

  4. 4

    jfreecharts에서 x 및 y 축 선을 조정하는 방법

  5. 5

    ArrayBufferLike의 typescript 정의의 깊은 의미

  6. 6

    Ionic 2 로더가 적시에 표시되지 않음

  7. 7

    복사 / 붙여 넣기 비활성화

  8. 8

    Google Play Console에서 '예기치 않은 오류가 발생했습니다. 나중에 다시 시도해주세요. (7100000)'오류를 수정하는 방법은 무엇입니까?

  9. 9

    정점 셰이더에서 카메라에서 개체까지의 XY 거리

  10. 10

    QT Designer를 사용하여 GUI에 이미지 삽입

  11. 11

    java Apache POI Word 기존 테이블 셀 스타일 및 서식이있는 행 삽입

  12. 12

    Kubernetes Horizontal Pod Autoscaler (HPA) 테스트

  13. 13

    Android Kotlin은 다른 활동에서 함수를 호출합니다.

  14. 14

    C # HttpWebRequest 기본 연결이 닫혔습니다. 전송시 예기치 않은 오류가 발생했습니다.

  15. 15

    어떻게 같은 CustomInfoWindow 다른 이벤트를 할 수 있습니다

  16. 16

    rclone으로 원격 디렉토리의 모든 파일을 삭제하는 방법은 무엇입니까?

  17. 17

    dataSnapShot.getValue () 반환 데이터베이스에 그겁니다 데이터 종료 널 (null)

  18. 18

    ORA-12557 TNS : 프로토콜 어댑터를로드 할 수 없습니다

  19. 19

    JNDI를 사용하여 Spring Boot에서 다중 데이터 소스 구성

  20. 20

    다음 컨트롤이 추가되었지만 사용할 수 없습니다.

  21. 21

    C # Asp.net 웹 API-JSON / XML 변환기 API 만들기

뜨겁다태그

보관