Socket实战——UDP连接
Socket实战系列:
Socket实战——UDP连接:https://blog.****.net/haoranhaoshi/article/details/86601468
Socket实战——TCP连接:https://blog.****.net/haoranhaoshi/article/details/86601522
Socket实战——查询数据库:https://blog.****.net/haoranhaoshi/article/details/86601566
Socket实战——监听数据库:https://blog.****.net/haoranhaoshi/article/details/86601584
Socket实战——聊天:https://blog.****.net/haoranhaoshi/article/details/86601771
Socket实战——文件上传:https://blog.****.net/haoranhaoshi/article/details/86601850
项目下载地址(IDEA搭建):https://download.****.net/download/haoranhaoshi/10933044
一端监听绑定IP的端口,另一端将数据包发给那一端的IP端口。
package UDP;
import javafx.application.Application;
import javafx.application.Platform;
import javafx.beans.property.SimpleStringProperty;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.layout.Pane;
import javafx.stage.Stage;
import javafx.stage.WindowEvent;
import java.io.IOException;
import java.net.*;
/**
* 一端监听绑定IP的端口,另端将数据包发给那一端的IP端口
*/
public class UDPReceive extends Application {
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) {
Label label = new Label();
SimpleStringProperty labelContent = new SimpleStringProperty("等待中!");
label.textProperty().bind(labelContent);
primaryStage.setTitle("ChatParticipant");
Pane pane = new Pane(label);
primaryStage.setScene(new Scene(pane,400, 200));
primaryStage.setX(100);
primaryStage.setY(100);
primaryStage.show();
new Thread(() -> {
try {
// 创建IP:127.0.0.1,端口:10002的Socket监听
DatagramSocket datagramSocket = new DatagramSocket(10002, InetAddress.getByName("127.0.0.1"));
while(true){
byte[] receivedData = new byte[1024];
DatagramPacket datagramPacket = new DatagramPacket(receivedData, receivedData.length);
datagramSocket.receive(datagramPacket);
// 未收到则后续不执行
Platform.runLater(() -> {
if(labelContent.get().equals("等待中!")){
labelContent.set("");
}
labelContent.set(labelContent.get() + new String(datagramPacket.getData(), 0 ,datagramPacket.getLength()));
});
}
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (SocketException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}).start();
primaryStage.addEventHandler(WindowEvent.WINDOW_CLOSE_REQUEST, event -> {
Platform.exit();
System.exit(0);
});
}
}
package UDP;
import javafx.application.Application;
import javafx.application.Platform;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.Pane;
import javafx.stage.Stage;
import javafx.stage.WindowEvent;
import java.io.IOException;
import java.net.*;
public class UDPSend extends Application {
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) {
Button button = new Button("发送");
button.setOnAction(event -> {
byte[] message = "消息已发送!".getBytes();
try {
DatagramSocket datagramSocket = new DatagramSocket();
// 数据包发往IP:127.0.0.1,端口:10002
DatagramPacket datagramPacket = new DatagramPacket(message, message.length, InetAddress.getByName("127.0.0.1"), 10002);
datagramSocket.send(datagramPacket);
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (SocketException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
});
primaryStage.setTitle("AnotherChatParticipant");
Pane pane = new Pane(button);
primaryStage.setScene(new Scene(pane,400, 200));
primaryStage.setX(500);
primaryStage.setY(100);
primaryStage.show();
primaryStage.addEventHandler(WindowEvent.WINDOW_CLOSE_REQUEST, event -> {
Platform.exit();
System.exit(0);
});
}
}