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
点赞
收藏