JavaFx中UDP通信的编码

JavaFx中UDP通信的编码,java,udp,Java,Udp,我在JavaFx中编码UDP通信时遇到问题 代码能够发送消息,但不能接收消息 我应该在源代码中修改什么来接收消息 以下是源代码: public class JavaFXApplication10 extends Application { public DatagramSocket receivesocket; public DatagramPacket receivepacket; public DatagramSocket sendsocket; public Datagram

我在JavaFx中编码UDP通信时遇到问题

代码能够发送消息,但不能接收消息

我应该在源代码中修改什么来接收消息

以下是源代码:

public class JavaFXApplication10 extends Application {

public DatagramSocket receivesocket; 
public DatagramPacket receivepacket; 
public DatagramSocket sendsocket;    
public DatagramPacket sendpacket;   
public InetSocketAddress remoteAdress;

public Label     label_IP;
public TextField tx_IP;
public Label     label_SENDPORT;
public Label     label_RECEIVEPORT;
public TextField tx_SENDPORT;
public TextField tx_RECEIVEPORT;
public Button    bt_co;
public Button    bt_start ;
private String    message; 
private XYChart.Series series; 
private Timeline timer; 
private static String    IP = "192.168.121.23"; 
private static Integer SENDPORT = 12345;       
private static Integer RECEIVEPORT = 12345;    
public double time_counter=0.0;
private String text;
private byte[] b;
@Override

public void start(Stage stage) throws Exception{


    /* text */
     tx_IP = TextFieldBuilder.create().text(IP).build();

    /* text */
    tx_SENDPORT = TextFieldBuilder.create().text(""+SENDPORT).build();

    /* text */
    tx_RECEIVEPORT = TextFieldBuilder.create().text(""+RECEIVEPORT).build();

    /*button */
    bt_co = ButtonBuilder.create().text("Connection")
            .prefWidth(200)
            .alignment(Pos.CENTER)
            .id("connect")
            .build();

    /* button_start */
    bt_start = ButtonBuilder.create().text("START")
            .id("start")
            .build();


    /* timer */
     timer = new Timeline(new KeyFrame(Duration.millis(1000), new EventHandler<ActionEvent>(){
        @Override
        public void handle(ActionEvent event) {

           time_counter = time_counter+1; // time

        }
    }));
    timer.setCycleCount(Timeline.INDEFINITE);
    timer.play();

    /*figure*/
    stage.setTitle("Line Chart Sample");

    final NumberAxis xAxis = new NumberAxis();
    final NumberAxis yAxis = new NumberAxis();
    xAxis.setLabel("Time [s]");
    yAxis.setLabel("Force [N]");
    //creating the chart
    final LineChart<Number,Number> lineChart = 
            new LineChart<Number,Number>(xAxis,yAxis);

    lineChart.setTitle("");

    //defining a series
    series = new XYChart.Series();
    series.setName("Force");
    series.getData().add(new XYChart.Data(0.0,0.0));
     lineChart.getData().add(series);




    HBox root1 = HBoxBuilder.create().spacing(100).children(tx_IP ,tx_SENDPORT,tx_RECEIVEPORT).build();
    HBox root2 = HBoxBuilder.create().spacing(50).children(bt_co).build();
    HBox root3 = HBoxBuilder.create().spacing(25).children(bt_start).build();
    VBox root4 = VBoxBuilder.create().spacing(25).children(root1,root2,root3,lineChart).build();


    Scene scene = new Scene(root4);

    recieve_UDP();


    scene.addEventHandler(ActionEvent.ACTION,actionHandler);



    stage = StageBuilder.create().width(640).height(640).scene(scene).title(" ").build();
    stage.show(); 
}


private void recieve_UDP() throws SocketException, IOException {


    ScheduledService<Boolean> ss = new ScheduledService<Boolean>()
    {
        @Override
        protected Task<Boolean> createTask()
        {

            Task<Boolean> task = new Task<Boolean>()
            {
                @Override
                protected Boolean call() throws Exception
                {
                  receivesocket = null;

                   byte[] receiveBuffer = new byte[1024];
                   receivepacket = new DatagramPacket(receiveBuffer, receiveBuffer.length);
                   receivesocket = new DatagramSocket(RECEIVEPORT);


                   receivesocket.receive(receivepacket);
                   message = new String(receivepacket.getData(),0, receivepacket.getLength());

                   System.out.println(message);



                   receivesocket.close();
                  return true;
                };
            };


             return task;           
        }

    };
    ss.start();
}



EventHandler<ActionEvent> actionHandler = new EventHandler<ActionEvent>(){
    public void handle (ActionEvent e){


        //////////////////////////////////////////////////////////////////////////////  
        Button src =(Button)e.getTarget();
        text = src.getId(); 
        System.out.println(text);
        b = new byte[5];

        if(text == "connect"){

          String text_IP = tx_IP.getText(); 

          label_IP.setText(text_IP);

          IP = text_IP; 


          String text_SENDPORT = tx_SENDPORT.getText(); 


          label_SENDPORT.setText(text_SENDPORT);

          SENDPORT = Integer.parseInt( text_SENDPORT);

          String text_RECEIVEPORT = tx_RECEIVEPORT.getText(); 

          label_RECEIVEPORT.setText(text_RECEIVEPORT);

          RECEIVEPORT = Integer.parseInt(text_RECEIVEPORT);

        }
        else{


               remoteAdress = new InetSocketAddress(IP, SENDPORT);

       sendsocket = null;


               try {
                   sendsocket = new DatagramSocket();
               } catch (SocketException ex) {
                  Logger.getLogger(JavaFXApplication10.class.getName()).log(Level.SEVERE, null, ex);
               }

               }
               if(text=="start"){

                     b[0] = (byte)0x02;
                     text ="OK";   


               }

               else{

               }


        Send_UDP();
         /////////////////////////////////////////////////////// 
    }
};
public void Send_UDP(){

    /////////////////////////////////////////////////////// 
if(text=="OK"){

            sendpacket = new DatagramPacket(b, b.length,remoteAdress);

            try {

                sendsocket.send(sendpacket);
            } catch (IOException ex) {
                Logger.getLogger(JavaFXApplication10.class.getName()).log(Level.SEVERE, null, ex);
            }

            sendsocket.close();
            text="";

            }
        else {}
        /////////////////////////////////////////////////////// 

}


public static void main(String[] args) {
    launch(args);
}
}
公共类JavaFXApplication10扩展应用程序{
公共数据采集器接收插座;
公共数据包接收包;
公共DatagramSocket sendsocket;
公共数据包发送包;
公共InetSocketAddress远程地址;
公共标签;
公共文本字段tx_IP;
公共标签发送端口;
公共标签接收端口;
公共文本字段tx_发送端口;
公共文本字段tx_RECEIVEPORT;
公共按钮bt_公司;
公共按钮bt_启动;
私有字符串消息;
私有XYChart.系列;
私人时间计时器;
私有静态字符串IP=“192.168.121.23”;
私有静态整数发送端口=12345;
私有静态整数RECEIVEPORT=12345;
公共双时间计数器=0.0;
私有字符串文本;
专用字节[]b;
@凌驾
public void start(Stage)引发异常{
/*正文*/
tx_IP=TextFieldBuilder.create().text(IP.build();
/*正文*/
tx_SENDPORT=TextFieldBuilder.create().text(“+SENDPORT.build()”;
/*正文*/
tx_RECEIVEPORT=TextFieldBuilder.create().text(“+RECEIVEPORT.build()”;
/*钮扣*/
bt_co=ButtonBuilder.create().text(“连接”)
.宽度(200)
.校准(位置中心)
.id(“连接”)
.build();
/*启动按钮*/
bt_start=ButtonBuilder.create().text(“开始”)
.id(“开始”)
.build();
/*计时器*/
计时器=新的时间线(新的关键帧(Duration.millis(1000),新的EventHandler(){
@凌驾
公共无效句柄(ActionEvent事件){
时间计数器=时间计数器+1;//时间
}
}));
timer.setCycleCount(Timeline.unfinite);
timer.play();
/*身材*/
阶段。设置标题(“折线图样本”);
最终数字axis xAxis=新数字axis();
最终数字axis yAxis=新数字axis();
xAxis.setLabel(“时间]”;
yAxis.setLabel(“强制[N]”);
//创建图表
最终线形图线形图=
新的线形图(xAxis、yAxis);
线形图。设置标题(“”);
//定义系列
series=新的XYChart.series();
series.setName(“Force”);
series.getData().add(新的XYChart.Data(0.0,0.0));
lineChart.getData().add(系列);
HBox root1=HBoxBuilder.create().间距(100).子项(tx_IP,tx_SENDPORT,tx_RECEIVEPORT).build();
hboxroot2=HBoxBuilder.create().spating(50).children(bt_co.build();
hboxroot3=HBoxBuilder.create().spating(25).children(bt_start).build();
VBox root4=VBoxBuilder.create().间距(25).子项(root1,root2,root3,lineChart).build();
场景=新场景(root4);
接收UDP();
scene.addEventHandler(ActionEvent.ACTION,actionHandler);
stage=StageBuilder.create().width(640).height(640).scene(scene).title(“”.build();
stage.show();
}
私有void receive_UDP()抛出SocketException,IOException{
ScheduledService ss=新的ScheduledService()
{
@凌驾
受保护的任务createTask()
{
任务=新任务()
{
@凌驾
受保护的布尔调用()引发异常
{
receivesocket=null;
字节[]接收缓冲区=新字节[1024];
receivepacket=新数据包(receiveBuffer,receiveBuffer.length);
receivesocket=新的DatagramSocket(RECEIVEPORT);
receivesocket.receive(receivepacket);
message=新字符串(receivepacket.getData(),0,receivepacket.getLength());
System.out.println(消息);
receivesocket.close();
返回true;
};
};
返回任务;
}
};
ss.start();
}
EventHandler actionHandler=新的EventHandler(){
公共无效句柄(ActionEvent e){
//////////////////////////////////////////////////////////////////////////////  
按钮src=(按钮)e.getTarget();
text=src.getId();
System.out.println(文本);
b=新字节[5];
如果(文本==“连接”){
字符串text_IP=tx_IP.getText();
label_IP.setText(text_IP);
IP=文本_IP;
字符串text_SENDPORT=tx_SENDPORT.getText();
label_SENDPORT.setText(text_SENDPORT);
SENDPORT=Integer.parseInt(text\u SENDPORT);
字符串text_RECEIVEPORT=tx_RECEIVEPORT.getText();
label_RECEIVEPORT.setText(text_RECEIVEPORT);
RECEIVEPORT=Integer.parseInt(text\u RECEIVEPORT);
}
否则{
RemoteAddress=新的InetSocketAddress(IP,发送端口);
sendsocket=null;
试一试{
sendsocket=newdatagramsocket();
}捕获(SocketException例外){
Logger.getLogger(JavaFXApplication10.class.getName()).log(Level.SEVERE,null,ex);
}
}
如果(文本==“开始”){
b[0]=(字节)0x02;
text=“确定”;
}
否则{
}
发送UDP();
/////////////////////////////////////////////////////// 
}
};
公共无效发送_UDP(){
/////////////////////////////////////////////////////// 
如果(文本=“确定”){
sendpacket=新数据包(b,b.长度,远程地址);
试一试{
sendsocket.send(sendpacket);
}捕获(IOEX异常){
Logger.getLogger(JavaFXApplication10.class.getName()).log(Level.SEVERE,null,ex);
}
sendsocket.close();
text=“”;
}
else{}
/////////////////////////////////////////////////
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.util.Date;

public class SimpleUDPClient {
    public static void main(String[] args) throws IOException {

        // get a datagram socket
        DatagramSocket socket = new DatagramSocket();
        System.out.println("### socket.getLocalPort():" + socket.getLocalPort() + " | socket.getPort(): " + socket.getPort());

        // send request
        byte[] buf = "Hello, I am UDP client".getBytes();
        InetAddress address = InetAddress.getByName("localhost");
        DatagramPacket packet = new DatagramPacket(buf, buf.length, address, 8002);
        socket.send(packet);

        // get response
        packet = new DatagramPacket(buf, buf.length);
        System.out.println("Waiting to receive response from server." + new Date());
        socket.receive(packet);
        System.out.println("Got the response back from server." + new Date());

        // display response
        String received = new String(packet.getData());
        System.out.println("Quote of the Moment: " + received);

        socket.close();
    }
}
import java.io.*;
import java.net.*;
import java.util.*;

public class SimpleUDPServer {

    public static void main(String[] args) throws SocketException, InterruptedException {
        DatagramSocket socket = new DatagramSocket(8002);

        while (true) {
            try {
                byte[] buf = new byte[256];

                // receive request
                DatagramPacket packet = new DatagramPacket(buf, buf.length);
                socket.receive(packet);

                System.out.println("### socket.getLocalPort():" + socket.getLocalPort() + " | socket.getPort(): " + socket.getPort());

                // figure out response
                String dString = "Server is responding:  asd  asdd";
                buf = new byte[256];
                buf = dString.getBytes();

                // send the response to the client at "address" and "port"
                InetAddress address = packet.getAddress();
                int port = packet.getPort();
                System.out.println("Data from client: " + new String(packet.getData()));
                packet = new DatagramPacket(dString.getBytes(), dString.getBytes().length, address, port);
                System.out.println("### Sending for packet.hashCode(): " + packet.hashCode() + " | packet.getPort(): " + packet.getPort());

                //Thread.sleep(5000);

                System.out.println("Now sending the response back to UDP client.");

                DatagramSocket sendingDatagramSocket = new DatagramSocket();
                sendingDatagramSocket.send(packet);
                sendingDatagramSocket.close();
                System.out.println("I am done");
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

}