Beste Allen,
Ik ben bezig met een socketlistener. Deze applicatie krijgt een via socket accept een string binnen die vervolgens naar een andere thread wordt gepushed om afgehandeld te worden. Dit werkt prima. Echter wil ik hier nu een GUI om heen bouwen, waarbij ik de server aan en uit kan schakelen. Echter kan ik hem wel inschakelen maar bij het uitschakelen krijg ik een error. Mijn vraag is nu heeft iemand enig idee hoe ik de server uit kan schakelen.
Vanuit de GUI gebruik ik de startServer en stopServer methode om aan en uit te schakelen.
De error is:
Bijvoorbaat dank voor de reacties
Ik ben bezig met een socketlistener. Deze applicatie krijgt een via socket accept een string binnen die vervolgens naar een andere thread wordt gepushed om afgehandeld te worden. Dit werkt prima. Echter wil ik hier nu een GUI om heen bouwen, waarbij ik de server aan en uit kan schakelen. Echter kan ik hem wel inschakelen maar bij het uitschakelen krijg ik een error. Mijn vraag is nu heeft iemand enig idee hoe ik de server uit kan schakelen.
Code:
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.concurrent.BlockingQueue;
public class SocketListener implements Runnable {
private final static int SOCKET_PORT = 4310;
BlockingQueue<Task> queue;
private ServerSocket socket = null;
private Socket connection;
private String responseStr = new String();
Thread t;
Boolean isAlive;
public SocketListener(BlockingQueue<Task> queue){
this.queue = queue;
t = new Thread (this, "Socket_Listener_Thread");
isAlive = false;
}
public void startServer(){
isAlive = true;
t.start();
System.out.println("Signal Server is running.");
}
@Override
public void run() {
try {
socket = new ServerSocket(SOCKET_PORT);
while(isAlive) {
connection = socket.accept();
this.handleConnection(connection);
}
} catch (IOException e) {
e.printStackTrace();
}
finally{
try {
socket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
System.out.println("Signal Server has been stopped.");
}
private void handleConnection(Socket connection){
try {
InputStreamReader inputStream = new InputStreamReader(connection.getInputStream());
DataOutputStream response = new DataOutputStream(connection.getOutputStream());
BufferedReader inputReader = new BufferedReader(inputStream);
String input = inputReader.readLine();
System.out.println("Listener: The input is " + input);
Task t = new Task();
t.setInputString(input);
try {
queue.put(t);
} catch (InterruptedException e) {
e.printStackTrace();
}
response.writeBytes(responseStr);
response.flush();
response.close();
//System.out.println("Running");
} catch (IOException e1) {
System.out.println("Fail!: " + e1.toString());
}
}
public void stopServer(){
try {
socket.close();
isAlive = false;
} catch (IOException e) {
e.printStackTrace();
}
}
}
Vanuit de GUI gebruik ik de startServer en stopServer methode om aan en uit te schakelen.
De error is:
Code:
java.net.SocketException: socket closed
at java.net.DualStackPlainSocketImpl.accept0(Native Method)
at java.net.DualStackPlainSocketImpl.socketAccept(Unknown Source)
at java.net.AbstractPlainSocketImpl.accept(Unknown Source)
at java.net.PlainSocketImpl.accept(Unknown Source)
at java.net.ServerSocket.implAccept(Unknown Source)
at java.net.ServerSocket.accept(Unknown Source)
at SocketListener.run(SocketListener.java:37)
at java.lang.Thread.run(Unknown Source)
Bijvoorbaat dank voor de reacties