通信"/>
android tcp传输数据,Android 基于TCP/IP的Socket通信
参考
截图
1、Android 客户端
image.png
2、PC服务端:用的是SocketTool软件模拟
image.png
流程
1、连接socket的服务端(ip和port):开启异步线程和socket
2、发送数据(OutputStream):异步
3、接收数据(InputStream):注意连接状态,异步读取
4、关闭连接:关闭socket和对应线程
注意
1、异常:android.os.NetworkOnMainThreadException。 socket需要在线程中使用
2、前后端统一传输或者接收协议 [requestcode size d1 d2 d3 ... ],在解析时候用得到
3、实施监控socket的连接状态,还是用心跳包发过去,然后返回数据,一段时间没有的话则代表socket连接失败。
代码
1、TcpClient.java:tcp-socket的客户端,略微做了通用封装,主要是连接,发送,接收,然后设置监听
/**
* Created by wujn on 2019/2/15.
* Version : v1.0
* Function: tcp client 长度无限制
*/
public class TcpClient {
/**
* single instance TcpClient
* */
private static TcpClient mSocketClient = null;
private TcpClient(){}
public static TcpClient getInstance(){
if(mSocketClient == null){
synchronized (TcpClient.class) {
mSocketClient = new TcpClient();
}
}
return mSocketClient;
}
String TAG_log = "Socket";
private Socket mSocket;
private OutputStream mOutputStream;
private InputStream mInputStream;
private SocketThread mSocketThread;
private boolean isStop = false;//thread flag
/**
* 128 - 数据按照最长接收,一次性
* */
private class SocketThread extends Thread {
private String ip;
private int port;
public SocketThread(String ip, int port){
this.ip = ip;
this.port = port;
}
@Override
public void run() {
Log.d(TAG_log,"SocketThread start ");
super.run();
//connect ...
try {
if (mSocket != null) {
mSocket.close();
mSocket = null;
}
InetAddress ipAddress = InetAddress.getByName(ip);
mSocket = new Socket(ipAddress, port);
//设置不延时发送
//mSocket.setTcpNoDelay(true);
/
更多推荐
android tcp传输数据,Android 基于TCP/IP的Socket通信
发布评论