Ticker

6/recent/ticker-posts

Java/JavaFX Client link to Android Server

It's Java/JavaFX version of the client running on PC, to link with Android Server.


package javafx_client;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.util.logging.Level;
import java.util.logging.Logger;
import javafx.application.Application;
import javafx.application.Platform;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.layout.HBox;
import javafx.scene.layout.Priority;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class JavaFX_Client extends Application {

Label labelSys;
TextField welcomeMsg;
Label labelAddress;
TextField textAddress;
Label labelPort;
TextField textPort;
Button buttonConnect;
Button buttonClear;
Label textResponse;

@Override
public void start(Stage primaryStage) {

labelSys = new Label();
welcomeMsg = new TextField();
labelAddress = new Label("IP Address");
textAddress = new TextField();
labelPort = new Label("Port");
textPort = new TextField();
buttonConnect = new Button("Connect");
buttonClear = new Button("Clear");
textResponse = new Label();

labelSys.setText(
System.getProperty("os.arch") + "/"
+ System.getProperty("os.name"));

HBox buttonbox = new HBox();
buttonbox.setSpacing(5);
HBox.setHgrow(buttonConnect, Priority.ALWAYS);
HBox.setHgrow(buttonClear, Priority.ALWAYS);
buttonConnect.setMaxWidth(Double.MAX_VALUE);
buttonClear.setMaxWidth(Double.MAX_VALUE);
buttonbox.getChildren().addAll(buttonConnect, buttonClear);

buttonConnect.setOnAction(buttonConnectEventHandler);

buttonClear.setOnAction(new EventHandler() {

@Override
public void handle(ActionEvent event) {
textResponse.setText("");
}
});

VBox mainLayout = new VBox();
mainLayout.setPadding(new Insets(5, 5, 5, 5));
mainLayout.setSpacing(5);
mainLayout.getChildren().addAll(labelSys, welcomeMsg,
labelAddress, textAddress, labelPort, textPort,
buttonbox, textResponse);

StackPane root = new StackPane();
root.getChildren().add(mainLayout);

Scene scene = new Scene(root, 300, 250);

primaryStage.setTitle("Pictured Magazine -- المجلة المصورة: JavaFX Client");
primaryStage.setScene(scene);
primaryStage.show();
}

public static void main(String[] args) {
launch(args);
}

EventHandler buttonConnectEventHandler
= new EventHandler() {

@Override
public void handle(ActionEvent event) {
String tMsg = welcomeMsg.getText();
if (tMsg.equals("")) {
tMsg = null;
}

RunnableClient runnableClient
= new RunnableClient(textAddress.getText(),
Integer.parseInt(textPort.getText()),
tMsg);

new Thread(runnableClient).start();
}
};

class RunnableClient implements Runnable{

String dstAddress;
int dstPort;
String response = "";
String msgToServer;

public RunnableClient(String addr, int port, String msgTo) {
dstAddress = addr;
dstPort = port;
msgToServer = msgTo;
}

@Override
public void run() {
Socket socket = null;
DataOutputStream dataOutputStream = null;
DataInputStream dataInputStream = null;

try {
socket = new Socket(dstAddress, dstPort);
dataOutputStream = new DataOutputStream(
socket.getOutputStream());
dataInputStream = new DataInputStream(socket.getInputStream());

if(msgToServer != null){
dataOutputStream.writeUTF(msgToServer);
}

response = dataInputStream.readUTF();


} catch (IOException ex) {
Logger.getLogger(JavaFX_Client.class.getName()).log(Level.SEVERE, null, ex);
} finally {

Platform.runLater(new Runnable(){

@Override
public void run() {
textResponse.setText(response);
}

});

if (socket != null) {
try {
socket.close();
} catch (IOException ex) {
Logger.getLogger(JavaFX_Client.class.getName()).log(Level.SEVERE, null, ex);
}
}

if (dataOutputStream != null) {
try {
dataOutputStream.close();
} catch (IOException ex) {
Logger.getLogger(JavaFX_Client.class.getName()).log(Level.SEVERE, null, ex);
}
}

if (dataInputStream != null) {
try {
dataInputStream.close();
} catch (IOException ex) {
Logger.getLogger(JavaFX_Client.class.getName()).log(Level.SEVERE, null, ex);
}
}

}
}

}

}

download filesDownload the files.

For Android Server side: refer to the example "Client/Server example: editable message sent from server".

This code can run on Raspberry Pi (with JDK 8 installed) also.

إرسال تعليق

0 تعليقات