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.
Vous devez vous connecter pour publier un commentaire.
Si vous démarrez le serveur, pouvez-vous
telnet
de cette combinaison ?Qui vous dira immédiatement si vous avez un problème de routage (
telnet
refusent de se connecter)aussi essayer de ping 192.168.1.100 à partir de l'ordinateur sur lequel vous exécutez le client (j'.e à partir de l'invite de commande si vous êtes dans la zone de windows)
Avez-vous vérifier si il n'y a aucun pare-feu bloque le port personnalisé (41111) sur votre réseau (vérifiez également le pare-feu Windows)?
C'est la première chose à vérifier quand vous avez un délai d'attente.