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
客户端与服务端建立TCP的Socket连接,服务端得到客户端的发送内容,并将反馈发送给客户端。
package TCP;
import javafx.application.Application;
import javafx.application.Platform;
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.*;
import java.net.*;
/**
* 客户端与服务端建立TCP的Socket连接,服务端得到客户端的发送内容,并将反馈发送给客户端
*/
public class TCPServer extends Application {
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) {
Label label = new Label("等待客户端发送!");
try {
// 端口:1024-65535
ServerSocket serverSocket = new ServerSocket(10086, 50, InetAddress.getByName("127.0.0.1"));
new Thread(() -> {
try {
Socket socket;
String message = "";
// 等待客户端的连接
while (true) {
// 服务端接收
socket = serverSocket.accept();
// 未收到则后续不执行
InputStream inputStream = socket.getInputStream();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
String lineMessage;
while ((lineMessage = bufferedReader.readLine()) != null) {
message += lineMessage;
}
String finalMessage = message;
Platform.runLater(() -> label.setText(finalMessage));
// 关闭输入流
socket.shutdownInput();
// 服务端往客户端发送
OutputStream outputStream = socket.getOutputStream();
PrintWriter printWriter = new PrintWriter(outputStream);
printWriter.write("服务端已收到!");
printWriter.flush();
// 关闭输出流,才能发送,outputStream.close()、printWriter.close()、socket.close()可发送但会关闭连接,
// socket.shutdownOutput()不关闭连接,但四种方式都不能再socket.getOutputStream(),前三种报Socket is closed异常,
// 最后一种报Socket is shut down
socket.shutdownOutput();
}
} catch (IOException e) {
e.printStackTrace();
}
}).start();
} catch (IOException e) {
e.printStackTrace();
}
primaryStage.setTitle("TCPServer");
Pane pane = new Pane(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 TCP;
import javafx.application.Application;
import javafx.application.Platform;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.layout.Pane;
import javafx.stage.Stage;
import javafx.stage.WindowEvent;
import java.io.*;
import java.net.InetAddress;
import java.net.Socket;
public class TCPClient extends Application {
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) {
Label label = new Label("等待服务端回复!");
label.setTranslateY(50);
Button button = new Button("发送");
button.setOnAction(event -> {
try {
// 客户端向服务端发送
Socket socket = new Socket(InetAddress.getByName("127.0.0.1"), 10086);
OutputStream outputStream = socket.getOutputStream();
PrintWriter printWriter = new PrintWriter(outputStream);
printWriter.write("客户端已发送!");
printWriter.flush();
// 关闭输出流,才能发送
socket.shutdownOutput();
new Thread(() -> {
while (true) {
String message = "";
// 客户端接收服务端的反馈
InputStream inputStream;
try {
inputStream = socket.getInputStream();
if(inputStream.available() == 0){
continue;
}
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
String lineMessage;
while ((lineMessage = bufferedReader.readLine()) != null) {
message += lineMessage;
}
} catch (IOException e) {
e.printStackTrace();
}
String finalMessage = message;
Platform.runLater(() -> {
if(label.getText().equals("等待服务端回复!")){
label.setText("");
}
label.setText(label.getText() + finalMessage);
});
}
}).start();
} catch (IOException e) {
e.printStackTrace();
}
});
primaryStage.setTitle("TCPClient");
Pane pane = new Pane(label, 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);
});
}
}