SocketClient
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List; public class SocketClient {
public Socket socket = null;
public OutputStream outputStream = null;
public OutputStreamWriter outputStreamWriter = null;
public BufferedWriter bufferWrite = null;
public InputStream inputStream = null;
public SocketState socketState = SocketState.Closed;
public Thread socketThread = null;
public List<String> protocolList = new ArrayList();
private static boolean closeSocket = false; public void closeSocket() {
closeSocket = true;
socketThread = null;
} public void connectSocket() {
startThread();
} public void sendProtocolAPI(String protocol) {
protocolList.add(protocol);
} private void startThread() {
if (socketThread == null) {
socketThread = new Thread() {
public void Recivce(String protocol) {
//Protocol.ParseProtocol(protocol);
}
public void run() {
byte[] buffer = new byte['?'];
while (true) {
try {
if (closeSocket) {
closeSocket = false;
try {
if (socket != null) {
socket.close();
}
} catch (IOException localIOException1) {
}
socket = null;
outputStream = null;
outputStreamWriter = null;
inputStream = null;
System.gc();
socketState = SocketState.Closed;
break;
}
if (SocketState.Connected != socketState) {
socketState = SocketState.Connecting;
socket = new Socket();
InetSocketAddress ipa = new InetSocketAddress(Config.IP, Config.Port);
socket.connect(ipa, 500);
outputStream = socket.getOutputStream();
outputStreamWriter = new OutputStreamWriter(outputStream);
bufferWrite = new BufferedWriter(outputStreamWriter);
inputStream = socket.getInputStream();
socket.setTcpNoDelay(true);
socket.setKeepAlive(true);
socketState = SocketState.Connected;
Thread.sleep(1000L);
}
if (SocketState.Connected == socketState) {
if (protocolList.size() > 10) {
protocolList.removeAll(protocolList);
} else if (protocolList.size() > 0) {
while (protocolList.size() > 0) {
bufferWrite.write(protocolList.get(0));
bufferWrite.flush();
protocolList.remove(0);
Config.PaySDKAPI.ReceiveTcpLinkAPI(Config.IP, Config.Port);
}
}
}
} catch (Exception e) {
socketState = SocketState.Closed;
try {
Thread.sleep(5000L);
} catch (InterruptedException localInterruptedException) {
}
}
try {
if ((inputStream != null) && (SocketState.Connected == socketState)) {
int readSize = inputStream.read(buffer);
if (readSize > 0) {
Recivce(new String(buffer, 0, readSize));
}
}
} catch (IOException e) {
socketState = SocketState.Closed;
}
}
}
};
socketThread.start();
}
}
}
SocketClient的更多相关文章
- [Golang] 从零开始写Socket Server(1): Socket-Client框架
版权声明:本文为博主原创文章,未经博主允许不得转载. 第一次跑到互联网公司实习 ..感觉自己进步飞快啊~第一周刚写了个HTTP服务器用于微信公共号的点餐系统~ 第二周就直接开始一边自学Go语言一边写用 ...
- Socketclient与服务端
package test; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamR ...
- socket 一个websocke对应一个socketclient对象
using System; using System.Collections.Concurrent; using System.Collections.Generic; using System.Co ...
- 借助Nodejs探究WebSocket
文章导读: 一.概述-what's WebSocket? 二.运行在浏览器中的WebSocket客户端+使用ws模块搭建的简单服务器 三.Node中的WebSocket 四.socket.io 五.扩 ...
- Socket通信综合示例
1用户注册客户单选择'用户注册',提示要输入用户名,密码,确认密码,校验成功后将用户信息保存到数据库,并提示数据库注册成功,请登录2用户登录客户端选择'登录以后'后,提示输入用户名和密码,验证成功则提 ...
- zookeeper原理解析-选举
1)QuorumPeerMain加载 Zookeeper集群启动的入口类是QuorumPeerMain来加载配置启动QuorumPeer线程.首先我们来看下QuorumPeer, 谷歌翻译quorum ...
- .net Socket 通信简单实例(初级入门)
c/s控制台应用程序,Server.Client分别在两个项目中 服务端 using System; using System.Collections.Generic; using System.Li ...
- c# socket 编程
转 http://www.cnblogs.com/cailangwei/archive/2011/11/21/2258191.html 基于Socket服务器端实现本例主要是建立多客户端与服务器之 ...
- AgileEAS.NET SOA 中间件平台.Net Socket通信框架-介绍
一.前言 AgileEAS.NET SOA 中间件平台是一款基于基于敏捷并行开发思想和Microsoft .Net构件(组件)开发技术而构建的一个快速开发应用平台.用于帮助中小型软件企业建立一条适合市 ...
随机推荐
- 在Python中使用lambda高效操作列表的教程
在Python中使用lambda高效操作列表的教程 这篇文章主要介绍了在Python中使用lambda高效操作列表的教程,结合了包括map.filter.reduce.sorted等函数,需要的朋友可 ...
- mysql 高性能日记之索引(持续更新)
本文仅限于自己读写的笔记,需要具有一定 mysql(inodb,myisam 引擎)基础的高端玩家,不感兴趣的玩家们就不用在意了 Inodb 引擎 1,每个新建索引,都需要考虑清楚看是否是必须的,很多 ...
- Java集合(5):理解Collection
Collection是List.Set.Queue的共同接口.Collection主要方法有: int size():返回当前集合中元素的数量 boolean add(E e):添加对象到集合 boo ...
- How to remove duplicate lines in a large text file?
How would you remove duplicate lines from a file that is much too large to fit in memory? The dupli ...
- vue+element ui 重置表单
<el-dialog :title="addForm.title" :visible.sync="dialogFormVisible" width=&qu ...
- 20190925 - 在 macOS 下为 vscode 添加 code 命令行
在 macOS 下为 vscode 添加 code 命令行最简单办法是:Ctrl + Alt + P,安装 Shell Command: Install 'code' command in PATH, ...
- SLC cache功能
由于TLC需要多次编程,且未全部编程时wordLine处于不稳定状态,所以一般都会划出一部分区域作为SLC cache使用 SLC cache主要功能是,SSD接收到写命令后,先将数据写入SLC ca ...
- 【FIORI系列】SAP 一文读懂SAP Fiori是什么
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[FIORI系列]SAP 一文读懂SAP Fio ...
- MATLAB实现图像的代数运算
目录 1.使用求补运算对各类图像进行处理 2.利用imlincomb函数将图像的灰度值放大1.5倍 3.利用imlincomb函数计算两幅图像的平均值. 4.图像的加法运算 5.利用imnoise函数 ...
- MySQL知识篇-nmon监控
说明1:监控MySQL服务器资源不止一种方式,这种nmon监控图形化.历史记录查询笔记方便,便于MySQL优化后,对比其效率不同,资源利用率不同. 说明2:摘抄自https://www.cnblogs ...