Ola Pessoal,
A muito muito tempo que nao trabalho com sockets, porem ultimamente tive uma situacao em que foi necessaria a utilizacao de sockets, so estou usando porque tenho MESMO que fazer isso em sockets, até ai tudo bem, sem problemas, sockets sao uma das primeiras coisas que aprendemos sobre cliente/servidor em java, porem... diferente de Chuck Norris, a vida de um programador nao é uma aventura sem fim... e as vezes nos deparamos com stacktraces totalmente bizarros como este que irei lhes mostrar agora... o codigo esta bem simples e sem nenhuma funcao maluca, porem deem so uma olhada no stacktrace! para informacao, estou usando o windows 7 ultimate 64 bits.
Aqui esta minha classe Servidor:
public class Serveur {
private ServerSocket serverSocket;
private Socket socket;
private void demarrer() {
try {
while(true) {
serverSocket = new ServerSocket(ServerUtils.getPort());
serverSocket.setReuseAddress(true);
out.println("==========[ Le serveur est en attende de nouvelles conexions ]==========");
socket = serverSocket.accept();
out.println("==========[ Conecté au host: " + socket.getInetAddress() + " ]==========");
ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());
Thread listener = new Thread(new ServerListener(ois, oos));
listener.setName("ServerListener");
listener.start();
}
} catch (IOException ex) {ex.printStackTrace();}
}
private class ServerListener implements Runnable {
private ObjectInputStream ois;
private ObjectOutputStream oos;
public ServerListener(ObjectInputStream ois, ObjectOutputStream oos) {
this.ois = ois;
this.oos = oos;
}
public void run() {
try {
while (ois.readObject() != null) {
Request request = (Request) ois.readObject();
if(request.getRequest().equals("addProduit")) {
out.println("serveur reçu: addProduit! ");
}
}
} catch (IOException ex) {ex.printStackTrace();}
catch (ClassNotFoundException ex) {ex.printStackTrace();}
}
}
public static void main(String[] args) {
new Serveur().demarrer();
}
}
e aqui esta minha classe cliente…
public class TestServerConnection {
private Socket socket;
private ObjectOutputStream oos;
private Request request;
private void testConnexion() {
try {
socket = new Socket("localhost", 9999);
oos = new ObjectOutputStream(socket.getOutputStream());
request = new Request("addProduit");
oos.writeObject(request);
} catch (UnknownHostException ex) {ex.printStackTrace();}
catch (IOException ex) {ex.printStackTrace();}
}
public static void main(String[] args) {
new TestServerConnection().testConnexion();
}
}
e aqui o maravilhoso e abençoado stacktrace dos meus pecados… :twisted:
==========[ Le serveur est en attende de nouvelles conexions ]==========
==========[ Conecté au host: /127.0.0.1 ]==========
java.net.SocketException: Unrecognized Windows Sockets error: 0: JVM_Bind
at java.net.PlainSocketImpl.socketBind(Native Method)
at java.net.PlainSocketImpl.bind(PlainSocketImpl.java:365)
at java.net.ServerSocket.bind(ServerSocket.java:319)
at java.net.ServerSocket.<init>(ServerSocket.java:185)
at java.net.ServerSocket.<init>(ServerSocket.java:97)
at fr.dds.gestion.server.Serveur.demarrer(Serveur.java:21)
at fr.dds.gestion.server.Serveur.main(Serveur.java:63)
java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(SocketInputStream.java:168)
at java.net.SocketInputStream.read(SocketInputStream.java:182)
at java.io.ObjectInputStream$PeekInputStream.peek(ObjectInputStream.java:2249)
at java.io.ObjectInputStream$BlockDataInputStream.peek(ObjectInputStream.java:2542)
at java.io.ObjectInputStream$BlockDataInputStream.peekByte(ObjectInputStream.java:2552)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1297)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351)
at fr.dds.gestion.server.Serveur$ServerListener.run(Serveur.java:51)
at java.lang.Thread.run(Thread.java:619)
Se alguem souber a solucao para este problema, agradeço imensamente, começo a pensar que seja algo ligado ao SO e nao ao codigo… alguem ja passou por este problema?
Abraços a todos!
André Martins