android 多线程 socket,Android socket发送数据巨慢,为什么?

下面是本人在android平台下,socket绑定到OutputStream的wifi发送线程,发送速率巨慢。

Runnable SendTask = new Runnable() {

@Override

public void run() {

while (!_sendThreadStop) {

if (_commStatus) {

if (_sendQueue.size() > 0) {

MSG_NODE msg;

try {

msg = _sendQueue.take();

int left = 0;

int size = 2048;

while (left < msg.buffer.length) {

if (msg.buffer.length - left < size) {

size = msg.buffer.length - left;

}

_outStream.write(msg.buffer, left, size);

_outStream.flush();

left+=size;

}

//_outStream.write(msg.buffer);

//_outStream.flush();

} catch (InterruptedException e1) {

e1.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

}

try {

Thread.currentThread().sleep(20);

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

}

};

上面程序定义:

public class MSG_NODE {

byte[] buffer;

int length;

public MSG_NODE(byte[] buf, int length){

this.buffer = buf;

this.length = length;

}

}

网络发送主要就是一句  _outStream.write(msg.buffer, left, size); 不知道为什么我手机通过wifi连接pc服务器传送165k的jpg文件,耗时30s。

已做如下排除:

1. pc服务器接收肯定没问题,也用了网口调试精灵测试,接收165k数据确实需要30s。

2. wifi网络应该也没问题,手机qq使用wifi上传至网络200k/s以上,局域网qq传700k/s,而我们的程序跑,不到6k/s。

3. socket发送缓冲区,查看了默认大致500k,设置成2m,效果一致。

4. 网络上很多程序,所谓的socket传文件,基本就是我这样的,创建socket,绑定到OutputStream,也试了使用别人的几个socket类,效果没有改善。

5. 本人发送、接收、数据处理都是独立线程。实验了只开启发送线程,其他接收、处理等线程停掉,效果还是165k耗时30s。

6. outputStream.write(buf),本人程序是一次性加载文件到buf里,再发送。尝试了每次读取文件1k,再发送,效果一致。尝试过把读进的165k数据,每次write只发1-2k,效果一致。

7. 试过网络上简单的NIO类,效果一致。

8. 把此通信模块添加到java工程,在pc机上跑,发送165k只需要1-2s。

9. 测试过发送数据包不进多线程同步的队列,就发送一个165k的包,效果一致。

10. 执行outputStream.write(buf)一句本身耗时非常小,ms级。

我的程序问题到底在哪?为什么qq一些软件就不会出现这个问题?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值