[英]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 loop
即while(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.