{"id":15014343,"url":"https://github.com/alittlegreens/nettydemo","last_synced_at":"2025-04-06T22:09:55.198Z","repository":{"id":47191925,"uuid":"129356659","full_name":"aLittleGreens/NettyDemo","owner":"aLittleGreens","description":"Netty应用到Android，包含客户端、服务端（断线重连、心跳、黏包处理）","archived":false,"fork":false,"pushed_at":"2022-08-28T13:47:01.000Z","size":4106,"stargazers_count":310,"open_issues_count":15,"forks_count":78,"subscribers_count":9,"default_branch":"master","last_synced_at":"2025-04-06T22:09:44.941Z","etag":null,"topics":["android","netty","nio","tcp"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/aLittleGreens.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-04-13T06:14:36.000Z","updated_at":"2025-03-30T02:39:19.000Z","dependencies_parsed_at":"2022-09-08T19:51:17.128Z","dependency_job_id":null,"html_url":"https://github.com/aLittleGreens/NettyDemo","commit_stats":null,"previous_names":[],"tags_count":5,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aLittleGreens%2FNettyDemo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aLittleGreens%2FNettyDemo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aLittleGreens%2FNettyDemo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aLittleGreens%2FNettyDemo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/aLittleGreens","download_url":"https://codeload.github.com/aLittleGreens/NettyDemo/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247557767,"owners_count":20958047,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["android","netty","nio","tcp"],"created_at":"2024-09-24T19:45:30.104Z","updated_at":"2025-04-06T22:09:55.172Z","avatar_url":"https://github.com/aLittleGreens.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# NettyDemo\n\n \u003e Netty是基于Java NIO client-server的网络应用框架，使用Netty可以快速开发网络应用\n \n   \u003e更多用法请请跳转到[https://github.com/netty/netty](https://github.com/netty/netty)  \n \n **本项目基于Netty在Android平台所建项目，只是提供Netty的使用方式，大家可根据自己的需求，做相应的定制。**\n \n **演示时，客户端在Const.java中请修改TCP服务端ip地址就行了，服务端通过切换通道，可以与多个客户端通信。**\n \n 最后，不足之处请海涵，多多提issue，大家一起解决。\n ## 如何导入\n \n```\n dependencies {\n  implementation 'com.littlegreens.netty.client:nettyclientlib:1.0.5'\n } \n```\n ## 一、先看演示效果，后面有详细的用法教程\n \u003cimg src=\"https://github.com/cai784921129/NettyDemo/blob/master/screenshot/clent.gif\" width=\"280px\"/\u003e \u003cimg src=\"https://github.com/cai784921129/NettyDemo/blob/master/screenshot/server.gif\" height=\"280px\"/\u003e\n\n如果是作为TCP客户端使用的话，可以直接依赖\n\n## 二、HOW TO USE?\n\n1. **创建TCP客户端**\n```Java\n      NettyTcpClient  mNettyTcpClient = new NettyTcpClient.Builder()\n                .setHost(Const.HOST)    //设置服务端地址\n                .setTcpPort(Const.TCP_PORT) //设置服务端端口号\n                .setMaxReconnectTimes(5)    //设置最大重连次数\n                .setReconnectIntervalTime(5)    //设置重连间隔时间。单位：秒\n                .setSendheartBeat(true) //设置是否发送心跳\n                .setHeartBeatInterval(5)    //设置心跳间隔时间。单位：秒\n                .setHeartBeatData(\"I'm is HeartBeatData\") //设置心跳数据，可以是String类型，也可以是byte[]，以后设置的为准\n                .setIndex(0)    //设置客户端标识.(因为可能存在多个tcp连接)\n//                .setPacketSeparator(\"#\")//用特殊字符，作为分隔符，解决粘包问题，默认是用换行符作为分隔符\n//                .setMaxPacketLong(1024)//设置一次发送数据的最大长度，默认是1024\n                .build();\n```\n\n2. **设置监听**\n```Java\n        mNettyTcpClient.setListener(new NettyClientListener\u003cString\u003e() {\n            @Override\n            public void onMessageResponseClient(String msg, int index) {\n                //服务端过来的消息回调\n            }\n\n            @Override\n            public void onClientStatusConnectChanged(int statusCode, int index) {\n               //连接状态回调\n            }\n        });\n```\n3. **连接、断开连接**\n- 判断是否已经连接\n```Java\nmNettyTcpClient.getConnectStatus()\n```\n- 连接\n```Java\nmNettyTcpClient.connect();\n```\n- 断开连接\n```Java\nmNettyTcpClient.disconnect();\n```\n4. **发送信息到服务端**\n```Java\n                    mNettyTcpClient.sendMsgToServer(msg, new MessageStateListener() {\n                        @Override\n                        public void isSendSuccss(boolean isSuccess) {\n                            if (isSuccess) {\n                                Log.d(TAG, \"send successful\");\n                            } else {\n                                Log.d(TAG, \"send error\");\n                            }\n                        }\n                    });\n```\n\n## 二、小伙伴遇到的问题\n1、服务端反馈的消息被截断\n答：由于socket会粘包，sdk中默认的采用的是特殊符号作为分割符，来解决粘包问题，默认采用的分隔符是分割符，也可以通过setPacketSeparator，设置自定义的换行符，这样客户端发送信息的时候，sdk会在末尾，添加分隔符，这里需要注意服务端，返回信息的时候，也要添加对应的分隔符。\n\n2、master分支代码，不支持发送byte[]格式，byte[]格式的需求，请参考develop_2.0 分支\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falittlegreens%2Fnettydemo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Falittlegreens%2Fnettydemo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falittlegreens%2Fnettydemo/lists"}