Socket实战系列:
Socket实战——UDP连接:https://blog.csdn.net/haoranhaoshi/article/details/86601468
Socket实战——TCP连接:https://blog.csdn.net/haoranhaoshi/article/details/86601522
Socket实战——查询数据库:https://blog.csdn.net/haoranhaoshi/article/details/86601566
Socket实战——监听数据库:https://blog.csdn.net/haoranhaoshi/article/details/86601584
Socket实战——聊天:https://blog.csdn.net/haoranhaoshi/article/details/86601771
Socket实战——文件上传:https://blog.csdn.net/haoranhaoshi/article/details/86601850
Socket实战——文件下载:https://blog.csdn.net/haoranhaoshi/article/details/86632897
项目下载地址(IDEA搭建):https://download.csdn.net/download/haoranhaoshi/10933044
聊天方既能发送数据包,又能接收数据包。
package ChatByUDP;
import javafx.application.Application;
import javafx.application.Platform;
import javafx.beans.property.SimpleStringProperty;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.layout.Pane;
import javafx.scene.text.Text;
import javafx.stage.Stage;
import javafx.stage.WindowEvent;
import java.io.IOException;
import java.net.*;
/**
* 聊天方既能发送数据包,又能接收数据包
*/
public class ChatParticipant extends Application {
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) {
TextField textField = new TextField();
Button button = new Button("发送");
button.setTranslateX(140);
button.setOnAction(event -> {
String content = textField.getText();
if(content == null || content.equals("")){
Alert alert = new Alert(Alert.AlertType.WARNING, "请输入发送内容", ButtonType.OK);
alert.show();
return;
}
byte[] message = content.getBytes();
try {
DatagramSocket datagramSocket = new DatagramSocket();
// 数据包发往IP:127.0.0.1,端口:10003
DatagramPacket datagramPacket = new DatagramPacket(message, message.length, InetAddress.getByName("127.0.0.1"), 10003);
datagramSocket.send(datagramPacket);
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (SocketException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
});
Label label = new Label();
label.setTranslateY(50);
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(() ->
label.setText(new String(datagramPacket.getData(), 0, datagramPacket.getLength()))
);
}
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (SocketException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}).start();
primaryStage.setTitle("ChatParticipant");
Pane pane = new Pane(textField, button, label);
primaryStage.setScene(new Scene(pane, 400, 200));
primaryStage.setX(100);
primaryStage.setY(100);
primaryStage.show();
primaryStage.addEventHandler(WindowEvent.WINDOW_CLOSE_REQUEST, event -> {
Platform.exit();
System.exit(0);
});
}
}
package ChatByUDP;
import javafx.application.Application;
import javafx.application.Platform;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.layout.Pane;
import javafx.stage.Stage;
import javafx.stage.WindowEvent;
import java.io.IOException;
import java.net.*;
public class AnotherChatParticipant extends Application {
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) {
TextField textField = new TextField();
Button button = new Button("发送");
button.setTranslateX(140);
button.setOnAction(event -> {
String content = textField.getText();
if(content == null || content.equals("")){
Alert alert = new Alert(Alert.AlertType.WARNING, "请输入发送内容", ButtonType.OK);
alert.show();
return;
}
byte[] message = content.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();
}
});
Label label = new Label();
label.setTranslateY(50);
new Thread(() -> {
try {
// 创建IP:127.0.0.1,端口:10003的Socket监听
DatagramSocket datagramSocket = new DatagramSocket(10003, 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(() ->
label.setText(new String(datagramPacket.getData(), 0, datagramPacket.getLength()))
);
}
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (SocketException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}).start();
primaryStage.setTitle("AnotherChatParticipant");
Pane pane = new Pane(textField, button, label);
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);
});
}
}