Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/alittlegreens/nettydemo
Netty应用到Android,包含客户端、服务端(断线重连、心跳、黏包处理)
https://github.com/alittlegreens/nettydemo
android netty nio tcp
Last synced: 5 days ago
JSON representation
Netty应用到Android,包含客户端、服务端(断线重连、心跳、黏包处理)
- Host: GitHub
- URL: https://github.com/alittlegreens/nettydemo
- Owner: aLittleGreens
- Created: 2018-04-13T06:14:36.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2022-08-28T13:47:01.000Z (about 2 years ago)
- Last Synced: 2024-10-21T06:14:52.701Z (15 days ago)
- Topics: android, netty, nio, tcp
- Language: Java
- Homepage:
- Size: 3.92 MB
- Stars: 307
- Watchers: 10
- Forks: 77
- Open Issues: 15
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# NettyDemo
> Netty是基于Java NIO client-server的网络应用框架,使用Netty可以快速开发网络应用
>更多用法请请跳转到[https://github.com/netty/netty](https://github.com/netty/netty)
**本项目基于Netty在Android平台所建项目,只是提供Netty的使用方式,大家可根据自己的需求,做相应的定制。**
**演示时,客户端在Const.java中请修改TCP服务端ip地址就行了,服务端通过切换通道,可以与多个客户端通信。**
最后,不足之处请海涵,多多提issue,大家一起解决。
## 如何导入
```
dependencies {
implementation 'com.littlegreens.netty.client:nettyclientlib:1.0.5'
}
```
## 一、先看演示效果,后面有详细的用法教程
如果是作为TCP客户端使用的话,可以直接依赖
## 二、HOW TO USE?
1. **创建TCP客户端**
```Java
NettyTcpClient mNettyTcpClient = new NettyTcpClient.Builder()
.setHost(Const.HOST) //设置服务端地址
.setTcpPort(Const.TCP_PORT) //设置服务端端口号
.setMaxReconnectTimes(5) //设置最大重连次数
.setReconnectIntervalTime(5) //设置重连间隔时间。单位:秒
.setSendheartBeat(true) //设置是否发送心跳
.setHeartBeatInterval(5) //设置心跳间隔时间。单位:秒
.setHeartBeatData("I'm is HeartBeatData") //设置心跳数据,可以是String类型,也可以是byte[],以后设置的为准
.setIndex(0) //设置客户端标识.(因为可能存在多个tcp连接)
// .setPacketSeparator("#")//用特殊字符,作为分隔符,解决粘包问题,默认是用换行符作为分隔符
// .setMaxPacketLong(1024)//设置一次发送数据的最大长度,默认是1024
.build();
```2. **设置监听**
```Java
mNettyTcpClient.setListener(new NettyClientListener() {
@Override
public void onMessageResponseClient(String msg, int index) {
//服务端过来的消息回调
}@Override
public void onClientStatusConnectChanged(int statusCode, int index) {
//连接状态回调
}
});
```
3. **连接、断开连接**
- 判断是否已经连接
```Java
mNettyTcpClient.getConnectStatus()
```
- 连接
```Java
mNettyTcpClient.connect();
```
- 断开连接
```Java
mNettyTcpClient.disconnect();
```
4. **发送信息到服务端**
```Java
mNettyTcpClient.sendMsgToServer(msg, new MessageStateListener() {
@Override
public void isSendSuccss(boolean isSuccess) {
if (isSuccess) {
Log.d(TAG, "send successful");
} else {
Log.d(TAG, "send error");
}
}
});
```## 二、小伙伴遇到的问题
1、服务端反馈的消息被截断
答:由于socket会粘包,sdk中默认的采用的是特殊符号作为分割符,来解决粘包问题,默认采用的分隔符是分割符,也可以通过setPacketSeparator,设置自定义的换行符,这样客户端发送信息的时候,sdk会在末尾,添加分隔符,这里需要注意服务端,返回信息的时候,也要添加对应的分隔符。2、master分支代码,不支持发送byte[]格式,byte[]格式的需求,请参考develop_2.0 分支