ich möchte einen TCP-Server implementieren der ein Programm auf einem anderen Rechner ausführt, das ich zuvor geschrieben hab. Es ist ein kleines Programm das parallel Suchanfragen von namen und nummer ausführen kann. Dieses Programm soll auf dem Browser des anderen Rechners ausgeführt werden. Leider kenn ich mich mit web sockets kaum aus. Könnte mir bitte jemand helfen den code zum laufen zu bringen. ich weiss nicht wie ich den Request richtig aufbauen muss.
(
(
(
Java:
package Server;
import java.io.*;
import java.net.*;
/**
* Created by ubuntu on 02.07.18.
* Wartet auf pc am Port 9021
*/
class TcpEchoServer {
public static void main([URL='http://www.google.com/search?hl=en&q=allinurl%3Adocs.oracle.com+javase+docs+api+string']String[/URL][] args) throws [URL='http://www.google.com/search?hl=en&q=allinurl%3Adocs.oracle.com+javase+docs+api+exception']Exception[/URL] {
int serverPort = 9021;
[URL='http://www.google.com/search?hl=en&q=allinurl%3Adocs.oracle.com+javase+docs+api+system']System[/URL].out.println("S: Start auf Host pc" +
" am Port "+serverPort);
// ServerSocket einrichten und im accept() warten
// ---------------------------------------------------------
[URL='http://www.google.com/search?hl=en&q=allinurl%3Adocs.oracle.com+javase+docs+api+serversocket']ServerSocket[/URL] ss = new [URL='http://www.google.com/search?hl=en&q=allinurl%3Adocs.oracle.com+javase+docs+api+serversocket']ServerSocket[/URL](serverPort);
[URL='http://www.google.com/search?hl=en&q=allinurl%3Adocs.oracle.com+javase+docs+api+socket']Socket[/URL] s = null;
[URL='http://www.google.com/search?hl=en&q=allinurl%3Adocs.oracle.com+javase+docs+api+system']System[/URL].out.println("S: Vor dem accept()");
s = ss.accept();
// Leser und Schreiber einrichten
// ---------------------------------------------------------
[URL='http://www.google.com/search?hl=en&q=allinurl%3Adocs.oracle.com+javase+docs+api+bufferedreader']BufferedReader[/URL] sbr = new [URL='http://www.google.com/search?hl=en&q=allinurl%3Adocs.oracle.com+javase+docs+api+bufferedreader']BufferedReader[/URL](
new [URL='http://www.google.com/search?hl=en&q=allinurl%3Adocs.oracle.com+javase+docs+api+inputstreamreader']InputStreamReader[/URL](
s.getInputStream()));
[URL='http://www.google.com/search?hl=en&q=allinurl%3Adocs.oracle.com+javase+docs+api+printwriter']PrintWriter[/URL] spw = new [URL='http://www.google.com/search?hl=en&q=allinurl%3Adocs.oracle.com+javase+docs+api+printwriter']PrintWriter[/URL](s.getOutputStream());
// Die wiederholten Echos mit diesem Client abwickeln
// ---------------------------------------------------------
[URL='http://www.google.com/search?hl=en&q=allinurl%3Adocs.oracle.com+javase+docs+api+string']String[/URL] zeile;//inputline
while(true) {
[URL='http://www.google.com/search?hl=en&q=allinurl%3Adocs.oracle.com+javase+docs+api+system']System[/URL].out.println("S: Vor dem readLine()");
zeile = sbr.readLine();
[URL='http://www.google.com/search?hl=en&q=allinurl%3Adocs.oracle.com+javase+docs+api+system']System[/URL].out.println("S: Aus dem Socket kommt->" + zeile);
spw.println(zeile); // <== Das ist das Echo
spw.flush();
if(zeile.equals("quit")) break;
} // while
spw.close();//writer
sbr.close();//reader
ss.close();//
s.close();
//System.out.println("°Schließe Client.");
}
private static [URL='http://www.google.com/search?hl=en&q=allinurl%3Adocs.oracle.com+javase+docs+api+string']String[/URL] sendRequest() {
[URL='http://www.google.com/search?hl=en&q=allinurl%3Adocs.oracle.com+javase+docs+api+string']String[/URL] request = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\n" +
"<html>" +
"<body>" +
"<h2 align=center>Telefonverzeichnis</h2>" +
"<h3>Sie können nach Name oder nach Telefonnummer oder nach beiden (nebenläufig) suchen.</h3>" +
"<form method=get action=\"http://sun70:9865[URL='http://sun70:9865\']\[/URL]">" +
"<table>" +
"<tr>" + "<td valign=top>[URL='http://www.google.com/search?hl=en&q=allinurl%3Adocs.oracle.com+javase+docs+api+name']Name[/URL]:</td>" + "<td><input name=A>" + "</td>" + "<td>" + "</td>" + "</tr>" +
"<tr>" + "<td valign=top>Nummer:</td>" + "<td>" + "<input name=B>" + "</td>" + "<td>" + "</td>" + "</tr>" +
"<tr>" + "<td valign=top><input type=submit name=C value=Suchen></td>" +
"<td>" + "<input type=reset>" + "</td>" +
"<td>" + "<input type=submit name=D value=\"Server beenden\" >" + "</td>" + "</tr>" +
"</table>" +
"</form>" +
"</body>" +
"</html>" +
"\r\n";
return request;
}
}
Java:
import Ausgabe.Drucker;
import Telefonbuch.Suche;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* Main Klasse
*/
public class Main {
public static void main([URL='http://www.google.com/search?hl=en&q=allinurl%3Adocs.oracle.com+javase+docs+api+string']String[/URL][] args) {
try {
[URL='http://www.google.com/search?hl=en&q=allinurl%3Adocs.oracle.com+javase+docs+api+bufferedreader']BufferedReader[/URL] br = new [URL='http://www.google.com/search?hl=en&q=allinurl%3Adocs.oracle.com+javase+docs+api+bufferedreader']BufferedReader[/URL](new [URL='http://www.google.com/search?hl=en&q=allinurl%3Adocs.oracle.com+javase+docs+api+inputstreamreader']InputStreamReader[/URL]([URL='http://www.google.com/search?hl=en&q=allinurl%3Adocs.oracle.com+javase+docs+api+system']System[/URL].in));
// "(^[a-zäüö]+[ ]*[a-zäüö]+)[ ]*?|(\\d+)" = (Gruppe 1 = Name + Leerzeichen aber) (Gruppe 2 = Nummer)
Pattern pattern = Pattern.compile("(^[a-zäüö]+[ ]*[a-zäüö]+)[ ]*?|(\\d+)", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE);
[URL='http://www.google.com/search?hl=en&q=allinurl%3Adocs.oracle.com+javase+docs+api+string']String[/URL] EXIT_CMD = "EXIT".toLowerCase();
[URL='http://www.google.com/search?hl=en&q=allinurl%3Adocs.oracle.com+javase+docs+api+string']String[/URL] ALL_CMD = "ALLE".toLowerCase();
[URL='http://www.google.com/search?hl=en&q=allinurl%3Adocs.oracle.com+javase+docs+api+system']System[/URL].out.println("Geben sie bitte einen 'NAMEN' oder 'NUMMER' ein bzw. 'NAME'+'NUMMER' getrennt durch ein Leerzeichen ein. Um den Gesamten Eintrag der Tabelle zu erhalten geben sie bitte '" + ALL_CMD.toUpperCase() + "' ein.");
[URL='http://www.google.com/search?hl=en&q=allinurl%3Adocs.oracle.com+javase+docs+api+system']System[/URL].out.println("Um das Programm zu Beenden gib <" + EXIT_CMD.toUpperCase() + "> ein.");
while (true) {
[URL='http://www.google.com/search?hl=en&q=allinurl%3Adocs.oracle.com+javase+docs+api+system']System[/URL].out.print(""); // Startzeile des Terminals
[URL='http://www.google.com/search?hl=en&q=allinurl%3Adocs.oracle.com+javase+docs+api+string']String[/URL] input = br.readLine();
Matcher matcher = pattern.matcher(input);
Drucker drucker = new Drucker();
Suche nameSuche, nummerSuche, allEintraege;
try {
if (input.length() == 0 || input.startsWith(" ")) { // Leerzeichen und Leere Eingabe ueberpruefung
drucker.addErrorMessage("Bitte Eingabe Überprüfen: Es wird kein Leerzeichen als Eingabe Akzeptiert!");
} else if (input.length() == EXIT_CMD.length() && input.toLowerCase().equals(EXIT_CMD)) { // Exit-Befehl ueberpruefung
[URL='http://www.google.com/search?hl=en&q=allinurl%3Adocs.oracle.com+javase+docs+api+system']System[/URL].out.println("Auf Wiedersehen!");
return; // Beendet das Programm
} else if (input.length() == ALL_CMD.length() && input.toLowerCase().equals(ALL_CMD)) { // Alle Eintraege anzeigen
allEintraege = new Suche(); // Alle Eintraege Iteration wird Initialisiert
allEintraege.start(); // Alle Eintraege wird gestartet
allEintraege.join(); // Thread wartet bis er fertig ist
drucker.add(allEintraege.getList()); // Alle Eintraege werden an Drucker uebergeben
} else { // Namen und Nummern verarbeitung
while (matcher.find()) { // laeuft solange bis alle Gefundenen Patterns bearbeitet wurden
//
// Startet eine Namen Suche in einem Thread
//
if (matcher.group(1) != null && matcher.group(2) == null) { // Enthaelt nur A-Z und Umlaute Check
nameSuche = new Suche(matcher.group(1)); // Namen Suche wird Initialisiert
nameSuche.setUncaughtExceptionHandler((t, e) -> [URL='http://www.google.com/search?hl=en&q=allinurl%3Adocs.oracle.com+javase+docs+api+system']System[/URL].out.println(">> " + matcher.group(1) + " konnte als Namen nicht gefunden werden. Bitte Prüfen sie die Eingabe."));
nameSuche.start(); // Nummern Suche wird gestartet
nameSuche.join(); // Thread wartet bis er fertig ist
drucker.add(nameSuche.getList()); // Nummern Suche wird an Printer uebergeben
}
if (matcher.group(2) != null && matcher.group(1) != null) { // Enthaelt nur Zahlen Check
nummerSuche = new Suche([URL='http://www.google.com/search?hl=en&q=allinurl%3Adocs.oracle.com+javase+docs+api+integer']Integer[/URL].parseInt(matcher.group(2))); // Nummern Suche wird Initialisiert
nameSuche = new Suche(matcher.group(1)); // Namen Suche wird Initialisiert
nameSuche.setUncaughtExceptionHandler((t, e) -> [URL='http://www.google.com/search?hl=en&q=allinurl%3Adocs.oracle.com+javase+docs+api+system']System[/URL].out.println(">> " + matcher.group(1) + " konnte als Namen nicht gefunden werden. Bitte Prüfen sie die Eingabe."));
nummerSuche.setUncaughtExceptionHandler((t, e) -> [URL='http://www.google.com/search?hl=en&q=allinurl%3Adocs.oracle.com+javase+docs+api+system']System[/URL].out.println(">> " + matcher.group(2) + " konnte als Nummer nicht gefunden werden. Bitte Prüfen sie die Eingabe."));
nummerSuche.start(); // Nummern Suche wird gestartet
nameSuche.start(); // Nummern Suche wird gestartet
nummerSuche.join();
nameSuche.join(); // Thread wartet bis er fertig ist
drucker.add(nameSuche.getList()); // Nummern Suche wird an Printer uebergeben
drucker.add(nummerSuche.getList()); // Nummern Suche wird an Drucker uebergeben
}
//
// Startet eine Nummern Suche in einem Thread
//
if (matcher.group(2) != null && matcher.group(1) == null ) { // Enthaelt nur Zahlen Check
nummerSuche = new Suche([URL='http://www.google.com/search?hl=en&q=allinurl%3Adocs.oracle.com+javase+docs+api+integer']Integer[/URL].parseInt(matcher.group(2))); // Nummern Suche wird Initialisiert
nummerSuche.setUncaughtExceptionHandler((t, e) -> [URL='http://www.google.com/search?hl=en&q=allinurl%3Adocs.oracle.com+javase+docs+api+system']System[/URL].out.println(">> " + matcher.group(2) + " konnte als Nummer nicht gefunden werden. Bitte Prüfen sie die Eingabe."));
nummerSuche.start(); // Nummern Suche wird gestartet
nummerSuche.join(); // Thread wartet bis er fertig ist
drucker.add(nummerSuche.getList()); // Nummern Suche wird an Drucker uebergeben
}
}
}
} catch ([URL='http://www.google.com/search?hl=en&q=allinurl%3Adocs.oracle.com+javase+docs+api+exception']Exception[/URL] e) {
e.printStackTrace();
} finally {
drucker.print(); // Drucker - Warteschlange wird ausgegeben
}
}
} catch ([URL='http://www.google.com/search?hl=en&q=allinurl%3Adocs.oracle.com+javase+docs+api+exception']Exception[/URL] e) {
e.printStackTrace();
}
}
}
Java:
package Telefonbuch;
import java.util.ArrayList;
import java.util.List;
/**
* Klasse zum finden der Adressen
*/
class Telefonliste {
private List<Eintrag> telefonliste = new ArrayList<Eintrag>();
/**
* Initialisiert die Adressen
*/
Telefonliste() {
addContact(new Eintrag("Meier", 4711));
addContact(new Eintrag("von Ulm", 1815));
addContact(new Eintrag("Müller", 4711));
addContact(new Eintrag("Meier", 1816));
}
private void addContact(Eintrag a) { this.telefonliste.add(a); }
/**
* Suche und Ausgabe
*
* Namens Suche
*/
List<Eintrag> find([URL='http://www.google.com/search?hl=en&q=allinurl%3Adocs.oracle.com+javase+docs+api+string']String[/URL] name) {
List<Eintrag> list = new ArrayList<>(findName(name));
return list.size() == 0 ? null : list;
}
/**
* Nummer Suche
*/
List<Eintrag> find(int nummer) {
List<Eintrag> list = new ArrayList<>(sucheNummer(nummer));
return list.size() == 0 ? null : list;
}
/**
*Liste mit Einträgen
*/
List<Eintrag> getAll() {
List<Eintrag> result = new ArrayList<>(telefonliste);
if (result.isEmpty()) {
throw new [URL='http://www.google.com/search?hl=en&q=allinurl%3Adocs.oracle.com+javase+docs+api+nullpointerexception']NullPointerException[/URL]("leer");
} else {
return result;
}
}
/**
* Namens Suche
* liefert Liste mit Einträgen
*/
private List<Eintrag> findName([URL='http://www.google.com/search?hl=en&q=allinurl%3Adocs.oracle.com+javase+docs+api+string']String[/URL] name) {
List<Eintrag> result = new ArrayList<>();
for (Eintrag value : telefonliste) {
if (value.getName().toLowerCase().equals(name.toLowerCase())) {
result.add(value);
}
}
if (result.isEmpty()) {
throw new [URL='http://www.google.com/search?hl=en&q=allinurl%3Adocs.oracle.com+javase+docs+api+nullpointerexception']NullPointerException[/URL](name + " nicht gefunden.");
} else {
return result;
}
}
/**
* Nummer Suche
* liefert Liste mit Eintrag
*/
private List<Eintrag> sucheNummer(int nummer) {
List<Eintrag> result = new ArrayList<>();
for (Eintrag value : telefonliste) {
if (value.getNummer() == nummer) {
result.add(value);
}
}
if (result.isEmpty()) {
throw new [URL='http://www.google.com/search?hl=en&q=allinurl%3Adocs.oracle.com+javase+docs+api+nullpointerexception']NullPointerException[/URL](nummer + " nicht gefunden.");
} else {
return result;
}
}
}
Java:
package Telefonbuch;
import java.util.ArrayList;
import java.util.List;
/**
* Such Klasse mit Threads
*/
public class Suche extends [URL='http://www.google.com/search?hl=en&q=allinurl%3Adocs.oracle.com+javase+docs+api+thread']Thread[/URL] {
private Telefonliste telefonliste = new Telefonliste();
private List<Eintrag> searchList = new ArrayList<>();
private [URL='http://www.google.com/search?hl=en&q=allinurl%3Adocs.oracle.com+javase+docs+api+string']String[/URL] name;
private [URL='http://www.google.com/search?hl=en&q=allinurl%3Adocs.oracle.com+javase+docs+api+integer']Integer[/URL] nummer;
public Suche() {
this.name = null;
this.nummer = null;
}
public Suche([URL='http://www.google.com/search?hl=en&q=allinurl%3Adocs.oracle.com+javase+docs+api+string']String[/URL] name) {
this.name = name;
}
public Suche([URL='http://www.google.com/search?hl=en&q=allinurl%3Adocs.oracle.com+javase+docs+api+integer']Integer[/URL] nummer) {
this.nummer = nummer;
}
public void run() {
if (this.name != null) {
this.searchList.addAll(this.telefonliste.find(this.name));
} else if (this.nummer != null) {
this.searchList.addAll(this.telefonliste.find(this.nummer));
} else {
this.searchList.addAll(this.telefonliste.getAll());
}
}
public List<Eintrag> getList() {
return this.searchList;
}
}
Java:
package Telefonbuch;
/**
* Klasse für die Adressbuch Eintraege
*/
public class Eintrag {
private [URL='http://www.google.com/search?hl=en&q=allinurl%3Adocs.oracle.com+javase+docs+api+string']String[/URL] name;
private int nummer;
Eintrag([URL='http://www.google.com/search?hl=en&q=allinurl%3Adocs.oracle.com+javase+docs+api+string']String[/URL] name, int nummer) {
this.name = name;
this.nummer = nummer;
}
[URL='http://www.google.com/search?hl=en&q=allinurl%3Adocs.oracle.com+javase+docs+api+string']String[/URL] getName() {
return name;
}
int getNummer() {
return nummer;
}
public [URL='http://www.google.com/search?hl=en&q=allinurl%3Adocs.oracle.com+javase+docs+api+string']String[/URL] toString() {
return [URL='http://www.google.com/search?hl=en&q=allinurl%3Adocs.oracle.com+javase+docs+api+string']String[/URL].format("%-10s%-10d\n", getName(), getNummer());
}
}
Java:
package Ausgabe;
import Telefonbuch.Eintrag;
import java.util.List;
/**
* Ausgabe Klasse
*/
public class Drucker {
private StringBuilder sb = new StringBuilder();
/**
* Formatierung
*/
public Drucker() {
sb.append([URL='http://www.google.com/search?hl=en&q=allinurl%3Adocs.oracle.com+javase+docs+api+string']String[/URL].format("%-10s%-10s\n", "Name", "Nummer"));
sb.append([URL='http://www.google.com/search?hl=en&q=allinurl%3Adocs.oracle.com+javase+docs+api+string']String[/URL].format("%-10s%-10s\n", "====", "======"));
}
/**
* Hinzufühgen einer Liste
*
* parameter lists eine List mit Eintrag
*/
public void add(List<Eintrag> lists) {
for (Eintrag eintrag : lists) {
sb.append(eintrag);
}
}
/**
* Hinzufühgen einer Error Message zum Stringbuilder
*
* msg String
*/
public void addErrorMessage([URL='http://www.google.com/search?hl=en&q=allinurl%3Adocs.oracle.com+javase+docs+api+string']String[/URL] msg) {
sb.setLength(0);
sb.append(msg);
}
/**
* Ausgabe auf der Konsole
*/
public void print() {
if (sb.length() > 42) {
[URL='http://www.google.com/search?hl=en&q=allinurl%3Adocs.oracle.com+javase+docs+api+system']System[/URL].out.println(sb);
}
}
}