Hi leute!
Wir haben eine Server ( die SPS) Client (PC) Verbindung jedoch haben wir folgendes Problem:
Wir haben eine Klasse in der wir den ScheduledExecutorService mit scheduleWithFixedDelay verwenden. Leider bekommen wir bevor wir das 1. mal von der SPS etwas zurückbekommen diesen Fehler:
java.net.SocketTimeoutException: Read timed out
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(SocketInputStream.java:129)
at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:264)
at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:306)
at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:158)
at java.io.InputStreamReader.read(InputStreamReader.java:167)
at java.io.BufferedReader.fill(BufferedReader.java:136)
at java.io.BufferedReader.readLine(BufferedReader.java:299)
at java.io.BufferedReader.readLine(BufferedReader.java:362)
at Hagelkanone.business.DefaultClient.sendAndReceiveLine(DefaultClient.java:39)
at Hagelkanone.business.StringSenden$1.run(StringSenden.java:81)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
at java.util.concurrent.FutureTask$Sync.innerRunAndReset(FutureTask.java:317)
at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:150)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$101(ScheduledThreadPoolExecutor.java:98)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.runPeriodic(ScheduledThreadPoolExecutor.java:181)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:205)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:619)
Hab im Internet schon was drüber gelesen, dass das Socket Objekt i-wie 2mal verwendet werden soll oder so i-wie...kenn mich nicht so aus und wollte daher fragen ob wer ne Lösung hat:
danke schon mal im Voraus!
Wir haben eine Server ( die SPS) Client (PC) Verbindung jedoch haben wir folgendes Problem:
Wir haben eine Klasse in der wir den ScheduledExecutorService mit scheduleWithFixedDelay verwenden. Leider bekommen wir bevor wir das 1. mal von der SPS etwas zurückbekommen diesen Fehler:
java.net.SocketTimeoutException: Read timed out
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(SocketInputStream.java:129)
at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:264)
at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:306)
at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:158)
at java.io.InputStreamReader.read(InputStreamReader.java:167)
at java.io.BufferedReader.fill(BufferedReader.java:136)
at java.io.BufferedReader.readLine(BufferedReader.java:299)
at java.io.BufferedReader.readLine(BufferedReader.java:362)
at Hagelkanone.business.DefaultClient.sendAndReceiveLine(DefaultClient.java:39)
at Hagelkanone.business.StringSenden$1.run(StringSenden.java:81)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
at java.util.concurrent.FutureTask$Sync.innerRunAndReset(FutureTask.java:317)
at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:150)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$101(ScheduledThreadPoolExecutor.java:98)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.runPeriodic(ScheduledThreadPoolExecutor.java:181)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:205)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:619)
Hab im Internet schon was drüber gelesen, dass das Socket Objekt i-wie 2mal verwendet werden soll oder so i-wie...kenn mich nicht so aus und wollte daher fragen ob wer ne Lösung hat:
Java:
public class StringSenden
{
private ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
private Socket socket = null;
private final String IpAdress = "192.168.0.1";
private final int Port = 11159;
public StringSenden()
throws Exception
{
final InetAddress adress = InetAddress.getByName(IpAdress);
// Erstellen der run - Methode
final Runnable empfangen = new Runnable()
{
public void run()
{
try
{
i++;
System.out.println("test " + i);
if(socket == null)
{
socket = new Socket(adress, Port);
socket.setSoTimeout(5000);
}
..... erstellen des zusendenden Strings....
//Senden des Strings
System.out.println("senden des Strings " + zuSendenderString);
String spsString = DefaultClient.sendAndReceiveLine(socket, zuSendenderString);
System.out.println("--- fertig ---" + spsString);
//Speichern des zerlegten empfangenen Strings
strFeld = strZer.Geschw(spsString);
manGUI.setGeschwindigkeitsTextfelder(strFeld);
for (int i = 1; i < 11; i++)
{
if(strFeld[i].equals("ERR") || strFeld[i].equals("BSY") || strFeld[i].equals("OFF") || strFeld[i].equals("0"))
{
System.out.println(strFeld[i] + "es wurde noch kein Objekt erzeugt");
}
else
{
System.out.println("StrSenden: einlesen der geschwindigkeit\n");
speed = Double.parseDouble(strFeld[i]);
if(speedold != speed)
{
speedold = speed;
System.out.println("StrSenden: erzeugen des Objekts\n");
Kanone kan = new Kanone("Kanonexx", 1, 25, speed, 2500);
}
}
}
socket.close();
socket = null;
}
catch (Exception e)
{
// JOptionPane.showMessageDialog(null, "StringSenden_run: " + e.getMessage(), "Fehler", JOptionPane.ERROR_MESSAGE);
e.printStackTrace();
}
}
};
//Ausführen der run - Methode alle 500ms
scheduler.scheduleWithFixedDelay(empfangen, 500, 500, TimeUnit.MILLISECONDS);
}
}
Java:
public class DefaultClient
{
public DefaultClient()
{
}
public synchronized static String sendAndReceiveLine(Socket socket, String text)
throws Exception
{
OutputStream os = socket.getOutputStream();
OutputStreamWriter ows = new OutputStreamWriter(os);
BufferedWriter bw = new BufferedWriter(ows);
bw.write(text);
bw.newLine();
bw.flush();
InputStream is = socket.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String antwort = br.readLine();
br.close();
bw.close();
return antwort;
}
}
danke schon mal im Voraus!