Socket.accept sluiten

Status
Niet open voor verdere reacties.

colaboer4

Gebruiker
Lid geworden
16 sep 2006
Berichten
19
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.

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
 
install netbeans met javafx plugin (java EE)
nu moet je eens zoeken op netbeans en fx hierdoor zal je op een pagina van netbeans komen die alles uitlegt

verder zal ik eerst je gui laten bouwen tegen dan zie ik je wel terug
denk aan events
denk aan het later kunnen gebruiken voor apps
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan