解决方案 »
- 安卓4.0.3 连接wifi不能上网
- android屏幕上绘图问题,亟待高手解决!!
- 请问textview可以设置字体的粗体 斜体吗?
- android触摸按键响应问题,遇到的人过来说下
- 讨论:如何用android编写“截屏”的代码呢?就像windows操作系统截屏一样?
- 一个FragmentActivity 里面有2个子Fragment,其中一个Fragment里面有一个包含三个Fragment的ViewPager,从Fragm
- Android画布(Canvas)之--- 圆环,利用Path切除一个扇形,形成一段圆弧效果
- android 蓝牙和wifi存在冲突
- apktool工具反编译apk时,只反编译出smail文件夹,没有res文件夹
- 我想开发一个本地服务端,服务端的同学帮忙指点下。
- listview+checkbox +下拉刷新 焦点问题
- android 如何实现listview嵌套?
一般1024或者512就可以了。你设置的居然有8K。
* 运行Socket通信的线程
* @author TCK-001
* @version 1.0
*/
@SuppressLint("HandlerLeak")
public final class SocketThread extends Thread { public void run() {
try {
while (true) {
if (!SocketManager.get().isStart()) {
return;
}
ServerSocket sever = SocketManager.get().getSocket();
if (null == sever || sever.isClosed()) {
return;
}
new ReadSocket(sever.accept()).start();
}
} catch (Exception e) {
Log.e("AbstractActivity", "Socket已经被回收");
}
}
/**
* 读取Socket并解析
* @author TCK-001
* @version 1.0
*/
public class ReadSocket extends Thread {
private Socket socket;
public ReadSocket(Socket socket) {
this.socket = socket;
}
public void run() {
try {
String jsonStr = FileUtil.get().readFile(socket.getInputStream(), HTTP.UTF_8, 1, false);
socket.close();
JSONObject json = new JSONObject(jsonStr);
if (json.getLong("memberId") == Container.member.getId() && Container.socketKey.equals(json.getString("socketKey"))
&& SettingService.get().getSetting(SettingService.RECEIVE_MSG)) {
Bundle bundle = new Bundle();
bundle.putInt("type", json.getInt("type"));
bundle.putString("data", json.getJSONObject("data").toString());
Message message = new Message();
message.setData(bundle);
TckApp.get().getLastAct(null).socketHandler.sendMessage(message);
}
} catch (Exception e) {
Log.e("AbstractActivity", "接收Socket消息,解析json", e);
}
}
}}
* Socket的管理器
* @author TCK-001
* @version 1.0
*/
public final class SocketManager {
private SocketManager() {}
private static SocketManager bean = new SocketManager();
private boolean start = false;
private ServerSocket socket;
/**
* 单例模式获得bean
* @return
*/
public static SocketManager get() {
return bean;
}
/**
* 启动所有的Socket
* */
public void start() {
if (null == Container.member || !ViewUtil.get().isNet() || start) {
return;
}
getStartThread().start();
}
/**
* 结束Socket
* */
public void end() {
start = false;
try {
if (null != socket) {
socket.close();
socket = null;
}
} catch (Exception e) {
Log.e("AbstractActivity", "关闭Socket", e);
}
}
private Thread getStartThread() {
return new Thread() {
public void run() {
try {
Container.socketPort = getPort();
ToolUtil tool = new ToolUtil(Domain.LONG_REQUEST_TIME, TckUrls.POINT_SET_SOCKET_URL);
Container.socketKey = tool.md5(tool.getRandom(4));
Map<String, Object> param = tool.createMap(new String[] { "ip", "port", "socketKey" },
new Object[] { tool.getLocalIp(), Container.socketPort, Container.socketKey });
tool.requestTck(param, false);
start = true;
new SocketThread().start();
Log.e("AbstractActivity", "Socket已经开启");
} catch (Exception e) {
Log.e("AbstractActivity", "开启Socket", e);
}
}
};
}
// 获得一个随机端口
private int getPort() {
int port = 0;
while (true) {
port = 10000 + Integer.parseInt(ToolUtil.get().getRandom(4));
try {
socket = new ServerSocket(port);
break;
} catch (Exception e) {
Log.e("AbstractActivity", "端口[" + port + "]已被占用", e);
}
}
return port;
} /**
* 是否正在运行socket
* @return
*/
public boolean isStart() {
return start;
} /**
* 获得socket监听
* @return
*/
public ServerSocket getSocket() {
return socket;
}}
他写8,可能是考虑字节与bit的转换关系。不过byte本身就是字节了。