我在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++;
}
}
}
答案 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(类型,长度,值)格式。