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构件(组件)开发技术而构建的一个快速开发应用平台.用于帮助中小型软件企业建立一条适合市 ...
随机推荐
- 为什么HashMap继承了AbstractMap还要实现Map?
前言 之前看源码一直忽略了这个现象,按理说HashMap的父类AbstractMap已经实现了Map,它为什么还要实现一次呢?遂上网查了一下,背后原因让人大跌眼镜. 原因 这是类库设计者的拼写错误,其 ...
- Windows10系统python环境下安装Dlib库(转载,蔡军帅亲测可用)
Dlib是一个很优秀的机器学习库,最近做人脸识别要用到这个库,简要记录一下配置过程,准备工作: 1.python环境 2.安装好pip(这里有个简单的安装教程) 3.Dlib包,贴一个我安装的版本,链 ...
- 文件夹的层级选择< OC实现 >
类似文件夹的层级选择,可以搜索和创建新文件夹,点击路径标题可以返回对应层级. 界面有点丑,功能还是大概实现了的!! 代码有点多,还是附上地址吧,有兴趣的可以看看哟!!! https://gith ...
- ERROR 2002 (HY000): Can 't connect to local MySQL server through socket '/tmp/mysql.sock '(2) "
找不到mysql.sock这个文件 如果在你操作安装提示创建该文件,重启服务器还是提示这个错误可以试一下 mysql -uroot -h 127.0.0.1 -p 应该是可以直接进入 具体处理方法 重 ...
- php screw加密与破解
一.破解工具之php-screw-brute 1.项目地址 https://github.com/securifybv/php-screw-brute 2.项目介绍 此脚本可以恢复/爆破php scr ...
- C#规范整理·资源管理和序列化
资源管理(尤其是内存回收)曾经是程序员的噩梦,不过在.NET平台上这个噩梦似乎已经不复存在.CLR在后台为垃圾回收做了很多事情,使得我们现在谈起在.NET上进行开发时,都会说还是new一个对象吧!回收 ...
- python 指定文件夹下所有文件(包括子目录下的文件)拷贝到目标文件夹下
#!/usr/bin/env python3 # -*- coding:utf8 -*- # @TIME :2018/9/17 9:02 # @Author:dazhan # @File :copyf ...
- fastadmin model关联模型 关联查询问题
一对一关联 public function getGoodName(){ return $this->belongsTo('app\api\model\goods\Good','goods_go ...
- Linux文件属性之用户与用户组基础知识回顾
回顾: 用户.用户组的概念: 每个文件和进程,都需要对应一个用户和用户组. linux系统通过UID和GID来识别用户和组的. 用户名相当于人名 UID和GID 身份证号 管理员:root do ...
- 第八周课程总结&实验报告(六)
第八周课程总结 启动多线程售票(上课老师说要加入作业的部分) public class TestDemo { public static void main(StringD args) throws ...