我正在編寫一個程序,使用UDP通過網絡發送一個整數(名爲intToSend的變量)。我在同一個網絡上的兩臺機器上一個接一個地運行程序。我認爲在運行它們之後,第一個要運行的將打開一個帶有發送整數的消息框,但這不會發生。兩個程序都等待接收數據包,如正在將「Waiting ...」顯示在控制檯上所示。我有程序要求輸入到控制檯的目標ip。之後,調用createSocket方法,接着是sendData,然後是receiveData。發送Java中的數據報包
下面是代碼:
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;
}
}
您還未得到足夠的信息。我猜你是在一個線程上運行它,所以receiveData總是在while(true)循環中。 –
@ChristopherSchneider就是這一點。我在計算機1上運行該程序,並將其提供給計算機2的IP地址。然後創建套接字,將數據發送到計算機2,該計算機沒有運行程序,因此沒有偵聽數據包。計算機1然後監聽數據包。然後程序在計算機2上運行。我給它的計算機1的ip,所以它應該發送一個數據包到計算機1,並且它應該在計算機1正在監聽數據包時被接收。 – Matty2532
好的...代碼在哪裏?你已經展示了一些方法,但沒有初始化代碼。 –