Les Sockets ne fonctionne pas en réseau

Je suis en train de travailler sur une application qui envoie des fichiers via le réseau.

J'ai utilisé 2 classes pour envoyer et recevoir le fichier que j'ai choisi.

Le problème que j'ai rencontrés, lorsque je travaille sur localhost, c'est que le processus se déroule correctement, mais lorsque je change l'adresse IP sur le réseau IP, il ne fonctionne pas.

Voici les deux classes que j'utilise.

Classe Server :

    package Test;

    import java.io.BufferedInputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.io.OutputStream;
    import java.net.ServerSocket;
    import java.net.Socket;

    public class Server{
 public static void main (String [] args ) throws IOException {
//create socket
ServerSocket servsock = new ServerSocket(41111);
while (true) {
  System.out.println("Waiting...");

  Socket sock = servsock.accept();
  System.out.println("Accepted connection : " + sock);

  //sendfile
  File myFile = new File ("C:\\Users\\Marrah.Zakaria\\Desktop\\test\\test.txt");
  byte [] mybytearray  = new byte [(int)myFile.length()];
  FileInputStream fis = new FileInputStream(myFile);
  BufferedInputStream bis = new BufferedInputStream(fis);
  bis.read(mybytearray,0,mybytearray.length);
  OutputStream os = sock.getOutputStream();
  System.out.println("Sending...");
  os.write(mybytearray,0,mybytearray.length);
  os.flush();
  sock.close();
  }
}
}

Classe Client:

 package Test;
import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.Socket;
public class Client{
public static void main (String [] args ) throws IOException {
int filesize=6022386; //filesize temporary hardcoded
long start = System.currentTimeMillis();
int bytesRead;
int current = 0;
Socket sock = new Socket("192.168.1.100",41111);
System.out.println("Connecting...");
//receive file
byte [] mybytearray  = new byte [filesize];
InputStream is = sock.getInputStream();
FileOutputStream fos = new FileOutputStream("C:\\Test\\test-copy.txt");
BufferedOutputStream bos = new BufferedOutputStream(fos);
bytesRead = is.read(mybytearray,0,mybytearray.length);
current = bytesRead;
do {
bytesRead =
is.read(mybytearray, current, (mybytearray.length-current));
if(bytesRead >= 0) current += bytesRead;
} while(bytesRead > -1);
bos.write(mybytearray, 0 , current);
bos.flush();
long end = System.currentTimeMillis();
System.out.println(end-start);
bos.close();
sock.close();
sock.getPort();
}
}

après l'exécution d'une exception apparaît :

Exception in thread "main" java.net.ConnectException: Connection timed out: connect
at java.net.DualStackPlainSocketImpl.connect0(Native Method)
at            java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:69)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:157)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:391)
at java.net.Socket.connect(Socket.java:579)
at java.net.Socket.connect(Socket.java:528)
at java.net.Socket.<init>(Socket.java:425)
at java.net.Socket.<init>(Socket.java:208)

Svp pourriez-vous me dire que dois-je faire pour se débarrasser de lui.


Je dis activé par les récepteurs de pare-feu une autre exception s'est produite :

 Exception in thread "main" java.net.ConnectException: Connection refused: connect
at java.net.DualStackPlainSocketImpl.connect0(Native Method)
at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:69)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:157)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:391)
at java.net.Socket.connect(Socket.java:579)
at java.net.Socket.connect(Socket.java:528)
at java.net.Socket.<init>(Socket.java:425)
at java.net.Socket.<init>(Socket.java:208)
  • C'est probablement un problème de réseau. Pouvez-vous vous de ping les machines où ce n'est pas de travail (de l'autre)?
  • Lors de la commutation à partir de localhost sur le réseau et de rencontrer les problèmes, j'ai l'habitude d'essayer de vérifier les deux hôtes peuvent communiquer les uns avec les autres. Essayez d'interroger les hôtes les uns des autres en premier.
  • Je l'ai fait déjà, il semble que ma machine reconnaître le récepteur de la machine.
  • Avez-vous été en mesure de résoudre le problème? Si oui, merci de faire partager avec moi parce que je suis confronté au même problème.