J'écris un programme pour envoyer un entier (variable appelée intToSend) sur un réseau utilisant UDP. Je cours le programme sur deux machines sur le même réseau, l'un après l'autre. Je pensais qu'après les avoir exécutées toutes les deux, la première à lancer ouvrirait une boîte de message avec l'entier envoyé, mais cela n'arrivera pas. Les deux programmes attendent qu'un paquet soit reçu comme indiqué par "Waiting ..." en cours d'impression sur la console. J'ai le programme demande à l'ip de destination d'être entré dans la console. Puis, après cela, la méthode createSocket est appelée, suivie de sendData, puis receiveData.Envoi de paquets de datagrammes en Java
Voici le code:
package main;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.SocketException;
import java.net.URL;
import java.net.UnknownHostException;
import java.util.Scanner;
import javax.swing.JOptionPane;
public class Main {
Scanner s = new Scanner(System.in);
PrintStream o = System.out, e = System.err;
InetAddress thisAddr, destAddr;
DatagramSocket socket;
int port = 1729, intToSend = 8;
boolean running = true;
public static void main(String[] args) {
new Main();
}
private Main() {
try {
thisAddr = InetAddress.getLocalHost();
System.out.println("Internal IP: " + thisAddr.getHostAddress().toString());
System.out.println("External IP: " + getIp());
} catch (Exception e) {
e.printStackTrace();
}
try {
destAddr = InetAddress.getByName(getDestIp());
} catch (UnknownHostException e) {
e.printStackTrace();
}
createSocket();
sendData();
receiveData();
}
private void receiveData(){
byte[] receiveBuffer = new byte[1024];
DatagramPacket receivePacket = new DatagramPacket(receiveBuffer, receiveBuffer.length);
while(true){
System.out.println("Waiting...");
try {
socket.receive(receivePacket);
} catch (IOException e) {
e.printStackTrace();
}
String receivedText = new String(receivePacket.getData());
JOptionPane.showMessageDialog(null, receivedText);
}
}
private void sendData(){
byte[] dataToSend = String.valueOf(intToSend).getBytes();
DatagramPacket packet = new DatagramPacket(dataToSend, dataToSend.length, destAddr, port);
try {
socket.send(packet);
} catch (IOException e) {
e.printStackTrace();
}
}
private void createSocket(){
try {
socket = new DatagramSocket(port);
} catch (SocketException e) {
e.printStackTrace();
}
}
public static String getIp() throws IOException{
URL whatismyip = new URL("http://icanhazip.com");
BufferedReader in = new BufferedReader(new InputStreamReader(whatismyip.openStream()));
return in.readLine();
}
private String getDestIp() {
String temp;
o.println("What is the other user's ip?");
temp = s.nextLine();
return temp;
}
}
Vous n'avez pas fourni suffisamment d'informations. Je suppose que vous exécutez ceci sur un seul thread, donc receiveData est toujours dans la boucle while (true). –
@ChristopherSchneider C'est le point. Je lance le programme sur l'ordinateur 1 et lui donne l'adresse IP de l'ordinateur 2. Il crée ensuite le socket, envoie les données à l'ordinateur 2 qui n'a pas le programme en cours d'exécution et n'écoute donc pas les paquets. L'ordinateur 1 est alors à l'écoute des paquets. Ensuite, le programme est exécuté sur l'ordinateur 2. Je lui donne l'ip de l'ordinateur 1 et donc il devrait envoyer un paquet à l'ordinateur 1 et il devrait être reçu comme l'ordinateur 1 écoute des paquets. – Matty2532
Ok ... où est ce code? Vous avez montré quelques méthodes, mais pas de code d'initialisation. –