簡體   English   中英

從Java中的套接字讀取時出錯

[英]Error reading from a socket in java

在套接字的一側,我知道數據正在正確進入套接字。

我建立了一個連接:

Connection sr = new Connection();
Server server = new Server("NAME", Interger.parseInt(port));
server.setIp(ip);
sr.setServer(server); 

//I know my server connection code is correct because I can send and receive data in 
//other areas of my program just fine

InputStream is = null;

try
{
  is = sr.getChannel().socket().getInputStream();

  BufferedReader br = new BufferedReader(new InputStreamReader(is));
  StringBuffer text = new StringBuffer();

  int k =0;

  while(k != -1)
  {
    k = br.read();
    text.append((char) k);
  }
}
catch(Exception e)
{
  //no errors ever get thrown
}

然后我只得到大約一半的數據,即我發送的21398個字節中的10989個字節。 它讀取的字節數各不相同,但是數據始終以..., "values": ["結尾,在我發送的數據中,它看起來像是..., "values": ["", ""]

繼續閱讀,直到掌握所有數據。 這個問題最近大約每周出現一次。 不能保證網絡將一次顯示所有數據。

您需要繼續閱讀,直到擁有所有數據為止。 您如何知道發送了多少數據? 您可能應該在客戶端/服務器之間建立一個小的協議,該協議定義將要發送多少數據,服務器讀取該小頭,然后繼續讀取,直到收到完整的消息為止。

不知道這是否可以幫助您:

int k =0;

while((k = br.read()) != -1){
   text.append((char) k);
}

1)在您的情況下,它正在檢查下一個iteration ,這可能導致在text末尾附加無法代表的字符(-1的char )。

2)切勿將catch block留空,可能會有execption

因此,因為我的套接字發送端是c ++,所以我不小心將空ASCII值傳遞給了套接字。 而且套接字的Java端沒有記錄,如果讀取遇到null值,它將把它當作文件的結尾。 因此它過早地終止了流,因為它命中了null。

暫無
暫無

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

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