如何在java中通过UDP数据报发送String数组?

时间:2015-11-16 23:55:50

标签: java network-programming udpclient

我在java中编写了一个程序来从数据库中检索数据并将其存储在名为Records的String数组中。程序将String msg发送到包含test client的服务器..您能否告诉我如何发送String [] Records代替String msg

感谢您的帮助 谢谢

这是程序:

import java.io.*;
import java.net.*;
import java.sql.*;

public class Client {

public static void main(String[] args) {
String [] Records= new String[5];
 int x = 1;
 while (true){
        try {

            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
            Connection con = DriverManager.getConnection("jdbc:odbc:DDS_DSN");
            Statement st = con.createStatement();



            PreparedStatement ps = con.prepareStatement(
                    "SELECT * FROM request_dns " +
                    "WHERE id = ?");
            ps.setInt(1, x);
ResultSet rs = ps.executeQuery();


            while ( rs.next() ) {
                Records[0]= rs.getString("id");
                Records[1]= rs.getString("source_ip");
                Records[2]= rs.getString("source_port");
                Records[3]= rs.getString("destination_ip");
                Records[4]= rs.getString("destination_port");

                System.out.println(Records[0]);
                System.out.println(Records[1]);
                System.out.println(Records[2]);
                System.out.println(Records[3]);
                System.out.println(Records[4]);
            }
            con.close();
        } catch (Exception e) {
            System.out.println(e);

        }


        DatagramSocket skt;

        try{

        skt =new DatagramSocket();
        String msg ="test client"; ///////////////// sent messege
        byte [] b = msg.getBytes();
        InetAddress host=InetAddress.getByName("localhost"); ///////// inserting the destination IP address

        int serverSocket =6700; ///////////////////port number

        ////////////////////////////////packet sender
        DatagramPacket request = new DatagramPacket (b,b.length,host,serverSocket);
        skt.send (request);

        /////////////////////packet receiver
       byte [] buffer = new byte [1000];
        DatagramPacket reply = new DatagramPacket (buffer,buffer.length);
        skt.receive(reply);
        System.out.println("client received \t"+new String(reply.getData()) );

        skt.close();




        }

        catch(Exception ex){

        }

x++;
}
    }

}

2 个答案:

答案 0 :(得分:1)

有许多方法可以做到这一点,但也许最简单的方法是将多个字符串转换为一个字符串然后再返回。这样你的其余代码就像现在一样。

String[] array = "a,b,c,d,e".split(",");
// to join multiple strings into one.
String s = Stream.of(array).collect(Collectors.joining(","));
// to split multiple strings from on.
String[] array2 = s.split(",");

根据您使用的编码,您可能会找到更好的分隔符,例如"|""\uffff"

注意:UDP是一种有损协议,这意味着无法保证收到数据包,并且发送方无法知道发生了这种情况。您可以添加协议以减少传输损失,但使用现有的执行此操作的库或TCP通常更简单。

答案 1 :(得分:0)

我不知道发送String []的方法。如果你需要在同一个数据报(string [0] + string [1] + ...)中的字符串后面发送字符串,你需要一些协议/约定来在字符串之间有一个分隔符或标记。它可能是一个你知道你从未在字符串中使用的特殊字符,或者你可以使用TLV(类型,长度,值)格式。