(25-07-2017 20:24)keloba schrieb: Falls auch mal jemand sowas in java machen möchte, hier mal eine Testklasse.
Code:
package de.cid;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class CIDTestServer {
// Start des Testservers auf Port 8090
public static void main(String[] args) throws IOException {
CIDServer server = new CIDServer();
server.start(8090);
}
public void start(int port) throws IOException {
ServerSocket server = new ServerSocket(port);
while (true) {
try {
Socket client = server.accept();
CIDClient cidClient = new CIDClient(client);
Thread th = new Thread(cidClient);
th.start();
} catch (IOException e) {
e.printStackTrace();
} finally {
}
}
}
class CIDClient implements Runnable {
Socket client;
OutputStream out;
InputStream in;
CID cid;
public CIDClient(Socket client) throws IOException {
this.client = client;
this.client.setTcpNoDelay(true);
out = client.getOutputStream();
in=client.getInputStream();
}
@Override
public void run() {
try {
StringBuilder sb=new StringBuilder();
while (client.isConnected()) {
int c=in.read();
if (c==-1)
break;
sb.append((char)c);
if ((char)c==']') {
// ACK als Bestätigung zurück schreiben
out.write(6);
cid=new CID(sb.toString());
System.out.println("CID: "+sb.toString());
sb=new StringBuilder();
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
class CID {
Pattern pattern = Pattern.compile("(\\[(\\d{4})(\\s)([1][8])([123])([0-9a-fA-F]{3})([012]{2})(\\d{3}).*\\])");
private String acct;
private String mt;
private String q;
private String xyz;
private String gg;
private String c1;
public CID(String msg) {
parse(msg);
}
public void parse(String msg) {
Matcher matcher = pattern.matcher(msg);
if (matcher.matches() && matcher.groupCount()==8) {
// ACCT MT QXYZ GG C1 C2 C3
acct=matcher.group(2);
mt=matcher.group(4);
q=matcher.group(5);
xyz=matcher.group(6);
gg=matcher.group(7);
c1=matcher.group(8);
}
}
}
}
Klasse!!! Danke für den Tipp mit
out.write(6). Damit wird das ACK bei der Lupusec XT2 Plus endlich akzeptiert.
Ich hatte vorher versucht das ACK als im Stream als \u0006 über PrintWriter zu schreiben. Das hatte nicht funktioniert.