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);
}
}
}
}