Witam.
Mam problem z zamknięciem socketa.
Mam taki przykładowy serwer.
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.net.ServerSocket;
import java.net.Socket;
public class ThreadedEchoServer {
/**
*
*/
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
try
{
int i = 1;
ServerSocket s = new ServerSocket(8888);
while(true)
{
Socket incoming = s.accept();
Runnable r = new ThreadedEchoHandler(incoming,i);
Thread t = new Thread(r);
t.start();
i++;
}
}
catch(IOException e)
{
e.printStackTrace();
}
}
}
class ThreadedEchoHandler implements Runnable
{
/**
*
* @param i
* @param c
*/
public ThreadedEchoHandler(Socket i, int c) {
// TODO Auto-generated constructor stub
incoming = i;
counter =c;
}
public void run() {
// TODO Auto-generated method stub
try{
try{
ObjectInputStream inStream = new ObjectInputStream(incoming.getInputStream());
try {
Test obiekt = (Test) inStream.readObject();
incoming.close();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
incoming.close();
inStream.close();
}
finally
{
incoming.close();
}
}
catch(IOException e){
e.printStackTrace();
}
}
i nie wiem w którym miejscu mam jeszcze zamknąć socket.
Wydaję mi się że wszystko powinno być ok. Jednak nie mogę dwa razy skompilować tego programu ponieważ za drugim razem wyskakuję komunikat:
java.net.BindException: Address already in use: JVM_Bind
at java.net.DualStackPlainSocketImpl.bind0(Native Method)
at java.net.DualStackPlainSocketImpl.socketBind(DualStackPlainSocketImpl.java:96)
at java.net.AbstractPlainSocketImpl.bind(AbstractPlainSocketImpl.java:376)
at java.net.PlainSocketImpl.bind(PlainSocketImpl.java:175)
at java.net.ServerSocket.bind(ServerSocket.java:376)
at java.net.ServerSocket.<init>(ServerSocket.java:237)
at java.net.ServerSocket.<init>(ServerSocket.java:128)
at ThreadedEchoServer.main(ThreadedEchoServer.java:27)
Co jak przypuszczam oznacza że port jest zajęty bo nie został zwolniony przez poprzednie uruchomienie i zamknięcie aplikacji.
Eclipse również podpowiada mi że muszę zamknąć.
Zmienną ServerSocket s - ale nie mam pojęcia gdzie.
Pozdrawiam i dzięki za pomoc. ( Choć przypuszczam że to pewnie totalnie lamerskie pytanie :))