Hi Leute,
ich bastele gerade an ein Java-MATLAB Server. Dieser soll Client-inputs an MATLAB weiterleiten. Dies funktioniert auch soweit! Nun wollte ich einfach dafür sorgen, dass auch mehrer User die Möglichkeit haben gleichzeitig Zugriff auf dem Server zu haben. Da Matlab nur seriell arbeitet, muss ich die Anfragen puffern. Die einfachste Methode schienen mir Threads zu sein! Ich habe zunächt ein Boolean Wert im unteren Thread benutzt, sollte dieser true sein wird gewartet, doch die Methodik funzte nicht wirklich. Ich bekamm auf Client Seite einen Time out , da nicht alle Inputs beim Server ankammen. Nun habe ich einfach “synchronized” benutzt, aber es will nicht recht klappen. Gleiches Problem.
Es könnte damit zusammenhängen, dass ich bei beiden Methoden folgendes
in.close();
out.close();
skt.close();```
auskommentieren muss, da sonst gar nichts klappt. Die Exception sagt nur Socket closed!?
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.regex.Pattern;
public class Network implements Runnable {
private ServerSocket serverSkt;
private Socket skt;
private int port = 4444;
private boolean alive = false;
private View view;
private Handling handler = new Handling(this);
public Network(View view) {
this.view = view;
}
public void listen() {
try {
serverSkt = new ServerSocket(port);
alive = true;
while(alive) {
skt = serverSkt.accept();
new Thread(this).start();
}
}
catch (IOException ex) {
view.getConsoleTextArea().append("Server connection could not be opened
" +
"Please make sure port " + port + " is open
" +
“and restart Server”);
view.getStatusMessageLabel().setText(“Server connection error”);
}
}
public void run() {
String outputLine = "";
String inputLine = "";
synchronized(this){
try {
BufferedReader in = new BufferedReader(new InputStreamReader(skt.getInputStream()));
PrintWriter out = new PrintWriter(new OutputStreamWriter(skt.getOutputStream()));
String split[] = Pattern.compile("; ").split(in.readLine());
String type = split[0];
int bufferSize = Integer.parseInt(split[1]);
char[] buffer = new char[bufferSize];
int charLength = in.read(buffer, 0, bufferSize);
inputLine = new String(buffer, 0, charLength);
view.getConsoleTextArea().append("Message received: " + "
" + inputLine + "
");
outputLine = handler.assign(type, inputLine);
out.print(outputLine.length() + "
" + outputLine);
out.flush();
view.getConsoleTextArea().append("Message sent: " + "
" + outputLine + "
");
String[] test = outputLine.split("
");
int j=0;
for (int i = 0; i < test.length; i++) {
j++;
}
in.close();
out.close();
skt.close();
}
catch (IOException ex) {
view.getConsoleTextArea().append("Network error");
Logger.getLogger(Network.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
public View getView() {
return view;
}
}
Ich weiß einfach nicht mehr weiter :confused: