gpt4 book ai didi

java - android: TCP 连接性能

转载 作者:可可西里 更新时间:2023-11-01 02:35:48 26 4
gpt4 key购买 nike

我有一个PC服务器和一个安卓客户端;我的 android 客户端启动到服务器的套接字连接。

当我连接到服务器时,我也从服务器接收数据到android客户端;

这是我的代码:

Socket socket = null;
DataOutputStream out = null;
DataInputStream in = null;
InputStream inputStream = null;
OutputStream outputStream = null;
...

public void connectToTCP()
{

try
{
socket = new Socket(HOST_ADDRESS, PORT);

socket.setSoTimeout(30000);
outputStream = socket.getOutputStream();
out = new DataOutputStream(outputStream);
inputStream = socket.getInputStream();
in = new DataInputStream(inputStream);

Log.e("TCP-", "Connected");

while (socket.isConnected()){readBytes();}
}
catch (UnknownHostException e)
{

Log.e("Error in tcp connection","Unknown Host");

}
catch (IOException e)
{

Log.e("Error in tcp connection", "Couldn't get I/O for the connection");

}
}

public void readBytes() throws IOException
{
if (in.available() > 0)
{
byte[] buffer = new byte[in.available()];
if (buffer.length > 0)
{
if (mListener != null)
{
int numberOfBytes = in.read(buffer);
mListener.tcpConnectionDataReceived(buffer, numberOfBytes);
}
}
}
}

但我的问题在于性能。我在设备上测试了代码,我注意到(从任务管理器中)该应用程序消耗了大量资源(CPU 使用率超过 50%),但是当我通过删除此 while 循环停止从套接字读取时 while (socket .isConnected()){readBytes();} CPU 使用率低于 1%。

有什么解决办法吗?

最佳答案

如果没有可用数据,您的readBytes() 方法将立即返回。由于它处于紧密循环中,您实际上是在不断检查是否有可用的东西,从而浪费了大量 CPU 资源。

使用您展示的代码,您最好进行简单的阻塞读取(即完全删除 available() 检查,并使用合理的固定大小缓冲区)。

关于java - android: TCP 连接性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8729268/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com