Skip to content

Commit 168d605

Browse files
author
Deng
committed
fixing thread problem
1 parent b6bd00f commit 168d605

13 files changed

Lines changed: 214 additions & 170 deletions

File tree

.idea/encodings.xml

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/gradle.xml

Lines changed: 1 addition & 17 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/misc.xml

Lines changed: 1 addition & 43 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/modules.xml

Lines changed: 0 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/vcs.xml

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

AndroidSocketClient.iml

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,23 @@
77
<option name="BUILDABLE" value="false" />
88
</configuration>
99
</facet>
10+
<facet type="android-gradle" name="Android-Gradle">
11+
<configuration>
12+
<option name="GRADLE_PROJECT_PATH" value=":" />
13+
</configuration>
14+
</facet>
15+
<facet type="android" name="Android">
16+
<configuration>
17+
<option name="ALLOW_USER_CONFIGURATION" value="false" />
18+
</configuration>
19+
</facet>
1020
</component>
1121
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_7" inherit-compiler-output="true">
1222
<exclude-output />
1323
<content url="file://$MODULE_DIR$">
1424
<excludeFolder url="file://$MODULE_DIR$/.gradle" />
1525
</content>
16-
<orderEntry type="inheritedJdk" />
26+
<orderEntry type="jdk" jdkName="JDK" jdkType="JavaSDK" />
1727
<orderEntry type="sourceFolder" forTests="false" />
1828
</component>
1929
</module>

README.md

Lines changed: 40 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -22,57 +22,56 @@ dependencies {
2222
```
2323

2424
## Updates
25-
* 2.0.0
25+
* 3.0.0
2626
</br>
27-
重构,移除了一些方法,解耦一些设置,变更比较大
27+
支持ReadToData和ReadToLength自动读取一下两种结构
2828
</br>
29-
增加发送消息时自动发送包头包尾信息用于粘包和分包
29+
常见包结构1:【包头(可选)】【正文】【包尾】
3030
</br>
31-
增加接收消息时自动依据设置的包头包尾分割消息
32-
</br>
33-
增加发送消息状态回调,增加分段发送设置,可查看发送单个包的发送进度
31+
常见包结构2:【包头(可选)】【余下包长度(正文加包尾长度)(此部分也可做包头)(此部分长度固定)】【正文】【包尾(可选)】
3432

35-
* 1.5.0
36-
</br>
37-
重构
38-
</br>
39-
抽离心跳包设置到HeartBeatHelper类中
40-
</br>
41-
抽离包尾判断到SocketPacketHelper类中
33+
## Usage
34+
### 基本配置
35+
```java
36+
// 设置ip端口,连接超时时长
37+
SocketClient socketClient = new SocketClient(new SocketClientAddress("127.0.0.1", "21998", 15 * 1000));
4238

43-
* 1.4.1
44-
</br>
45-
增加禁用心跳包和超时自动断开
46-
</br>
47-
SocketClient.disableHeartBeat();(设置heartBeatMessage为null效果相同)
48-
</br>
49-
SocketClient.disableRemoteNoReplyAliveTimeout();
39+
// 设置发送和接收String消息的默认编码,若为空无法发送string类型的信息,若不为空在接收时将自动尝试转换byte[]为string
40+
socketClient.setCharsetName("UTF-8");
41+
```
5042

51-
* 1.4.0
52-
</br>
53-
将发送和接收时对String和byte数组的转换移到后台线程进行
43+
### 发送配置
44+
```java
45+
// 设置自动发送的包头信息
46+
socketClient.getSocketPacketHelper().setSendHeaderData(CharsetUtil.stringToData("Header:", "UTF-8"));
5447

55-
* 1.3.4
56-
</br>
57-
修复SocketServer停止监听时未将已连接的client断开问题
58-
</br>
59-
心跳包修改为可发送byte数组
60-
</br>
61-
自动应答集成一个帮助类
48+
// 设置自动发送的包尾信息
49+
socketClient.getSocketPacketHelper().setSendTrailerData(new byte[]{0x13, 0x10});
6250

63-
* 1.3.3
64-
</br>
65-
修复SocketServer启动监听回调时机问题
51+
// 设置将(包正文与包尾长度之和)转换为byte[]的转换器,此部分由通信双方自定义协议
52+
socketClient.getSocketPacketHelper().setSendPacketLengthDataConvertor(new SocketPacketHelper.SendPacketLengthDataConvertor() {
53+
@Override
54+
public byte[] obtainSendPacketLengthDataForPacketLength(SocketPacketHelper helper, int packetLength) {
55+
byte[] data = new byte[4];
56+
data[3] = (byte) (packetLength & 0xFF);
57+
data[2] = (byte) ((packetLength >> 8) & 0xFF);
58+
data[1] = (byte) ((packetLength >> 16) & 0xFF);
59+
data[0] = (byte) ((packetLength >> 24) & 0xFF);
60+
return data;
61+
}
62+
});
6663

67-
* 1.3.0
68-
</br>
69-
修改消息收发机制
70-
</br>
71-
接收消息回调参数由String改为SocketResponsePacket,提供byte[]数据
72-
</br>
73-
获取String消息调用SocketResponsePacket.getMessage()实时获取
64+
// 设置发送正文的分段长度,用于回调显示进度
65+
socketClient.getSocketPacketHelper().setSendSegmentLength(1);
66+
67+
// 设置是否分段发送正文
68+
socketClient.getSocketPacketHelper().setSendSegmentEnabled(true);
69+
```
70+
71+
### 接收配置
72+
```java
73+
```
7474

75-
## Usage
7675
```java
7776

7877
SocketClient socketClient = new SocketClient(new SocketClientAddress("192.168.1.1", 80, 15 * 1000)); // 设置ip端口,连接超时时长

app/src/main/java/com/vilyever/androidsocketclient/TestClient.java

Lines changed: 68 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.vilyever.androidsocketclient;
22

33
import android.support.annotation.NonNull;
4+
import android.support.v7.widget.RecyclerView;
45
import android.util.Log;
56

67
import com.vilyever.logger.Logger;
@@ -38,7 +39,10 @@ public void connect() {
3839
private SocketClient localSocketClient;
3940
public SocketClient getLocalSocketClient() {
4041
if (this.localSocketClient == null) {
41-
this.localSocketClient = new SocketClient(new SocketClientAddress(IPUtil.getLocalIPAddress(true), "21998"));
42+
this.localSocketClient = new SocketClient();
43+
this.localSocketClient.getAddress().setRemoteIP("");
44+
this.localSocketClient.getAddress().setRemotePort("");
45+
this.localSocketClient.getAddress().setConnectionTimeout("");
4246
this.localSocketClient.setCharsetName(CharsetUtil.UTF_8);
4347

4448
this.localSocketClient.getSocketPacketHelper().setSendHeaderData(CharsetUtil.stringToData("Local:", CharsetUtil.UTF_8));
@@ -133,5 +137,67 @@ public void onReceivingPacketInProgress(SocketClient client, SocketResponsePacke
133137

134138

135139
/* Private Methods */
136-
140+
private void __i__setupAddress(SocketClient socketClient) {
141+
socketClient.getAddress().setRemoteIP(IPUtil.getLocalIPAddress(true));
142+
socketClient.getAddress().setRemotePort("21998");
143+
socketClient.getAddress().setConnectionTimeout(30 * 1000);
144+
}
145+
146+
private void __i__setupEncoding(SocketClient socketClient) {
147+
socketClient.setCharsetName(CharsetUtil.UTF_8);
148+
}
149+
150+
private void __i__setupSendHeader(SocketClient socketClient) {
151+
socketClient.getSocketPacketHelper().setSendHeaderData(CharsetUtil.stringToData("Local:", CharsetUtil.UTF_8));
152+
}
153+
154+
private void __i__setupSendTrailer(SocketClient socketClient) {
155+
socketClient.getSocketPacketHelper().setSendTrailerData(new byte[]{0x13, 0x10});
156+
}
157+
158+
private void __i__setupSendSegment(SocketClient socketClient) {
159+
socketClient.getSocketPacketHelper().setSendSegmentLength(8);
160+
socketClient.getSocketPacketHelper().setSendSegmentEnabled(true);
161+
}
162+
163+
164+
private void __i__setupSendLength(SocketClient socketClient) {
165+
socketClient.getSocketPacketHelper().setSendPacketLengthDataConvertor(new SocketPacketHelper.SendPacketLengthDataConvertor() {
166+
@Override
167+
public byte[] obtainSendPacketLengthDataForPacketLength(SocketPacketHelper helper, int packetLength) {
168+
byte[] ret = new byte[4];
169+
ret[3] = (byte) (packetLength & 0xFF);
170+
ret[2] = (byte) ((packetLength >> 8) & 0xFF);
171+
ret[1] = (byte) ((packetLength >> 16) & 0xFF);
172+
ret[0] = (byte) ((packetLength >> 24) & 0xFF);
173+
return ret;
174+
}
175+
});
176+
}
177+
178+
private void __i__setupReceiveHeader(SocketClient socketClient) {
179+
socketClient.getSocketPacketHelper().setReceiveHeaderData(CharsetUtil.stringToData("Server:", CharsetUtil.UTF_8));
180+
}
181+
182+
private void __i__setupReceiveByTrailer(SocketClient socketClient) {
183+
socketClient.getSocketPacketHelper().setReadStrategy(SocketPacketHelper.ReadStrategy.AutoReadToTrailer);
184+
socketClient.getSocketPacketHelper().setReceiveTrailerData(new byte[]{0x13, 0x10});
185+
}
186+
187+
private void __i__setupReceiveByLength(SocketClient socketClient) {
188+
socketClient.getSocketPacketHelper().setReadStrategy(SocketPacketHelper.ReadStrategy.AutoReadByLength);
189+
socketClient.getSocketPacketHelper().setReceivePacketLengthDataLength(4);
190+
socketClient.getSocketPacketHelper().setReceivePacketDataLengthConvertor(new SocketPacketHelper.ReceivePacketDataLengthConvertor() {
191+
@Override
192+
public int obtainReceivePacketDataLength(SocketPacketHelper helper, byte[] packetLengthData) {
193+
int length = (packetLengthData[3] & 0xFF) + ((packetLengthData[2] & 0xFF) << 8) + ((packetLengthData[1] & 0xFF) << 16) + ((packetLengthData[0] & 0xFF) << 24);
194+
195+
return length;
196+
}
197+
});
198+
}
199+
200+
private void __i__setupReceiveByManually(SocketClient socketClient) {
201+
socketClient.getSocketPacketHelper().setReadStrategy(SocketPacketHelper.ReadStrategy.Manually);
202+
}
137203
}

build.gradle

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,10 @@ buildscript {
55
jcenter()
66
}
77
dependencies {
8-
classpath 'com.android.tools.build:gradle:2.1.2'
8+
classpath 'com.android.tools.build:gradle:2.1.3'
99

1010
// NOTE: Do not place your application dependencies here; they belong
1111
// in the individual module build.gradle files
12-
1312
classpath 'com.github.dcendents:android-maven-gradle-plugin:1.3'
1413
}
1514
}
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
#Mon Apr 11 11:00:21 CST 2016
1+
#Thu Aug 18 13:33:11 CST 2016
22
distributionBase=GRADLE_USER_HOME
33
distributionPath=wrapper/dists
44
zipStoreBase=GRADLE_USER_HOME
55
zipStorePath=wrapper/dists
6-
distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
6+
distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip

0 commit comments

Comments
 (0)