java socket字符串_Java Socket Bug:从Socket的InputStream读取字符串
我正在使用Socket與ServerSocket進行通信。字符串正從服務(wù)器發(fā)送到我的套接字。每條不同的行都是一條消息,在解析時包含信息。要閱讀這些文本行,請使用掃描儀。
問題在于數(shù)據(jù)正在“爆發(fā)”。盡管服務(wù)器連續(xù)均勻地發(fā)送數(shù)據(jù),但客戶端掃描器讀取的數(shù)據(jù)似乎暫停,一次讀入一堆消息(30-40),然后再次暫停。它無限期地重復(fù)這個循環(huán)。
如果我增加發(fā)送數(shù)據(jù)的速率,暫停的持續(xù)時間會減少;如果我減慢數(shù)據(jù)速度(每秒1條消息),錯誤依然存在,并且暫停時間變得很長。就好像Socket在向Scanner發(fā)送任何數(shù)據(jù)之前等待其緩沖區(qū)溢出一樣;然后刷新所有內(nèi)容并再次等待溢出。但是,如果我減小Socket緩沖區(qū)的大小,則根本沒有任何變化。
應(yīng)該指出的是,我之前在服務(wù)器端使用過掃描器和套接字,并且所有的工作都按照需要進行。此外,我a)嘗試了像Java Tutorials這樣的BufferedReader(bug沒有任何變化),并且b)將服務(wù)器傳輸列表打印到一個文件中,并以相同的方式從文件中讀取,程序按預(yù)期工作(消息接收的恒定速率等),所以問題似乎在Socket本身。
所以:我如何解決這個問題?我擺脫了思想,我真的不知道發(fā)生了什么。
代碼(根據(jù)要求):
// In try block
// Makes the connection
Socket connection = new Socket(TARGET_MACHINE, PORT_NUMBER);
Scanner reader = new Scanner(connection.getInputStream());
// In new Thread
// In run()
while(!finished) // Boolean exit strategy
{
if(reader.hasNextLine())
Sring message = reader.nextLine();
}這就是我連接和檢索字符串的方式。
另外,我收到的字符串通常長約20-40個字符。
總結(jié)
以上是生活随笔為你收集整理的java socket字符串_Java Socket Bug:从Socket的InputStream读取字符串的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: int 互换 java_Java基础中I
- 下一篇: java存入数据库是问号_Java插入中