java socket字符串_Java Socket Bug:从Socket的InputStream读取字符串

我正在使用Socket与ServerSocket进行通信。字符串正从服务器发送到我的套接字。每条不同的行都是一条消息,在解析时包含信息。要阅读这些文本行,请使用扫描仪。

问题在于数据正在“爆发”。尽管服务器连续均匀地发送数据,但客户端扫描器读取的数据似乎暂停,一次读入一堆消息(30-40),然后再次暂停。它无限期地重复这个循环。

如果我增加发送数据的速率,暂停的持续时间会减少;如果我减慢数据速度(每秒1条消息),错误依然存在,并且暂停时间变得很长。就好像Socket在向Scanner发送任何数据之前等待其缓冲区溢出一样;然后刷新所有内容并再次等待溢出。但是,如果我减小Socket缓冲区的大小,则根本没有任何变化。

应该指出的是,我之前在服务器端使用过扫描器和套接字,并且所有的工作都按照需要进行。此外,我a)尝试了像Java Tutorials这样的BufferedReader(bug没有任何变化),并且b)将服务器传输列表打印到一个文件中,并以相同的方式从文件中读取,程序按预期工作(消息接收的恒定速率等),所以问题似乎在Socket本身。

所以:我如何解决这个问题?我摆脱了思想,我真的不知道发生了什么。

代码(根据要求):

// 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个字符。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值