Hallo!
Welche Library wäre für eine einfache TCP Client am besten?
Folgende Voraussetzungen:
Ich habe https://github.com/nsiatras/extasys einmal ausprobiert.
Da bekomme ich aber das Threading nicht hin. Erstellt über eine Inner class:
Alle Variablen können so vom Main Programm genommen werden.
Initialisierung mit:
Kann mir hier jemand bitte weiter helfen? Danke!
Welche Library wäre für eine einfache TCP Client am besten?
Folgende Voraussetzungen:
- nonblocking des Main Programems
- Senden und empfangen über den TCP Client
- Verbindungsabbrüche und Timeouts müssen abgefangen werden
Ich habe https://github.com/nsiatras/extasys einmal ausprobiert.
Da bekomme ich aber das Threading nicht hin. Erstellt über eine Inner class:
Java:
private class TCPClient extends Extasys.Network.TCP.Client.ExtasysTCPClient {
private InetAddress fServerIP;
private int fPort;
private boolean forceStopping;
public TCPClient(String name, String description, InetAddress remoteHostIP, int remoteHostPort,
int corePoolSize, int maximumPoolSize) {
super("Huawei", "", 1, 1);
fServerIP = remoteHostIP;
fPort = remoteHostPort;
TCPConnector connector = super.AddConnector("Main Connector", fServerIP, fPort, 8192);
try {
connector.fConnection.setSoTimeout(10000);
connector.fConnection.setKeepAlive(true);
} catch (SocketException e) {
e.printStackTrace();
}
}
public void Connect() {
try {
logger.debug("Start Connection");
forceStopping = false;
removeAllTickers();
updateOutputState(ENUM_STATE_STARTING);
super.Start();
tickOneTime(1000, TICK_POLL, true);
} catch (Exception ex) {
failedConnection();
}
}
public void Disconnect() {
try {
logger.debug("Stop Connection");
forceStopping = true;
removeAllTickers();
updateOutputState(ENUM_STATE_STOPPING);
super.ForceStop();
} catch (Exception ex) {
System.out.println(ex.getLocalizedMessage());
}
}
@Override
public void OnDataReceive(TCPConnector connector, DataFrame data) {
...
}
@Override
public void OnConnect(TCPConnector connector) {
updateOutputState(ENUM_STATE_RUNNING);
}
@Override
public void OnDisconnect(TCPConnector connector) {
if (forceStopping) {
updateOutputState(ENUM_STATE_STOPPED);
} else {
failedConnection();
}
}
}
Alle Variablen können so vom Main Programm genommen werden.
Initialisierung mit:
Java:
public void onStart(boolean value) {
if (value) {
if (tcpClient != null) {
tcpClient.Connect();
} else {
try {
tcpClient = new TCPClient("Huawei Inverter", "TCP Connection to Huawei inverter",
InetAddress.getByName(getPropertyIp()), getPropertyPort(), 1, 1);
tcpClient.Connect();
} catch (UnknownHostException e) {
e.printStackTrace();
}
}
} else {
if (tcpClient != null)
tcpClient.Disconnect();
}
}
Kann mir hier jemand bitte weiter helfen? Danke!