关于安卓客户端Socket通信问题(自动拆包、粘包)

Ljq_1994 2018-03-16 10:27:34
代码如下:
private class ReceiveThread extends Thread{
private InputStream inStream = null;
DataInputStream input = null;
private byte[] buffer;
private String str = null;

ReceiveThread(Socket socket){
try {
inStream = socket.getInputStream();
input=new DataInputStream(inStream);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public void run(){
while(isReceive){
buffer = new byte[1024 * 1024 * 2];
int length=0;
// buffer = new byte[inStream.available()];
try {
inStream.read(buffer);
length = input.read(buffer);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
str = new String(buffer, 0, length, "gb2312");//buffer,"UTF-8").trim();
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}

Runnable sendThread = new Runnable() {

@Override
public void run() {
// TODO Auto-generated method stub
byte[] sendBuffer = null;
try {
sendBuffer = strMessage.getBytes("UTF-8");
} catch (UnsupportedEncodingException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
try {
outStream = socket.getOutputStream();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
outStream.write(sendBuffer);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
};


通过接收方法,我从服务端获取到的数据被截断成1460个字节,刚好是最大报文长度。而且通过新建多个线程分别发送不同的信息,其中有几个会合并到一起被服务端接收。我写了C#的客户端demo,没有出现这种情况。

由于刚刚接触android编程,希望各位大佬能指点迷津,有demo就最好了。感激不尽!!!
...全文
807 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

80,359

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧