簡體   English   中英

Java套接字從C#讀取字節

[英]Java socket read bytes from C#

我正在嘗試從C#應用程序發送的Java應用程序中讀取byte[]

但是,當我使用下面的代碼在C#中將string編碼為byte[]並在Java中讀取它時,我得到了除最后一個字符以外的所有字符。 這是為什么?

Java接收代碼:

int data = streamFromClient.read();
while(data != -1){
    char theChar = (char) data;
    data = streamFromClient.read();
    System.out.println("" + theChar);
}

C#發送代碼:

public void WriteMessage(string msg){

    byte[] msgBuffer = Encoding.Default.GetBytes(msg);
    sck.Send(msgBuffer, 0, msgBuffer.Length, 0);
}

盡管其他人已經提供了可能的解決方案,但我想展示如何解決這個問題。

int data;
while((data=streamFromClient.read()) != -1) {
  char theChar = (char) data;
  System.out.println("" + theChar);
}

我只是覺得這種方法會更加清晰。 隨意選擇您更喜歡的那個。

需要說明的是:您的接收代碼中有錯誤。 您讀取了最后一個字節,但從未對其進行處理。 在每次迭代中,您都打印出前一次迭代中接收到的字節值。 因此,當數據為-1時將處理最后一個字節,但您無需進入循環,因此不會打印該循環。

您需要讀取數據,直到它變為-1為止。 因此,您需要在infinite loopwhile(true)內移動讀取語句,如果結果為-1則從語句中取出一次。

嘗試這個:

 int data = -1;
 while(true){
 data=streamFromClient.read();
 if(data==-1)
 {     
    break;
 }
 char theChar = (char) data;     
 System.out.println("" + theChar);
 }

我以為您的while循環可能以某種方式被1次迭代關閉了,但是在我看來,您的C#程序根本就沒有發送所有字符。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM