我制作了一个客户端/服务器应用程序,其中客户端迭代一些数字,并将每个数字发送到服务器。现在我想将这个数字添加到Arraylist中,但是每次包完成并启动另一个包时,第一个包中的数字就会丢失,所以我无法在服务器端保存该数字 - 有人可以帮助我吗?
这是我的客户
public class PingClientstripped {
public static void main(String[] args) throws Exception {
String ServerName = "localhost";
int port = 7007;
DatagramSocket socket = new DatagramSocket();
InetAddress IPAddress = InetAddress.getByName(ServerName);
for (int i = 0; i < 10; i++) {
String s = Integer.toString(i);
DatagramPacket request = new DatagramPacket(s.getBytes(),
s.length(), IPAddress, port);
socket.send(request);
}
}
// socket.close();
}
和服务器
public class PingServerstripped {
static int j = 0;
int n = 0;
public static void main(String[] args) throws Exception {
int port = 7007;
DatagramSocket socket = new DatagramSocket(port);
while (true) {
DatagramPacket request = new DatagramPacket(new byte[1024], 1024);
socket.receive(request);
Thread.sleep(100);
calculation(request);
}
}
public static void calculation(DatagramPacket request) throws IOException {
byte[] buf = request.getData();
ByteArrayInputStream bais = new ByteArrayInputStream(buf);
InputStreamReader isr = new InputStreamReader(bais);
BufferedReader br = new BufferedReader(isr);
String receive = br.readLine();
String line = new String(receive);
List<String> numbers = new ArrayList<String>();
List<String> duplicates = new ArrayList<String>();
System.out.println("line printed" + line);
numbers.add(line);
System.out.println("Size of the array" + numbers.size());
String value = null;
for (int i = 0; i < numbers.size(); i++) {
value = numbers.get(i);
while (numbers.contains(value)) {
System.out.println(i);
duplicates.add(value);
j++;
}
}
int all = numbers.size();
int dup = duplicates.size();
System.out.println("final size of the array" + numbers.size());
System.out.println("number of duplicates " + j);
System.out.println("Those were duplicates" + dup);
}
}
最佳答案
移动
List<String> numbers = new ArrayList<String>();
List<String> duplicates = new ArrayList<String>();
这样它们是类范围的字段而不是局部变量
例如
static int j = 0;
int n = 0;
List<String> numbers = new ArrayList<String>();
List<String> duplicates = new ArrayList<String>();
编辑
在此代码中,数字和值都没有改变,因此循环将是无限的,也许使用 if
而不是循环
while (numbers.contains(value)) {
System.out.println(i);
duplicates.add(value);
j++;
}
关于java - 在客户端/服务器应用程序中将元素添加到服务器端的 arrayList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25758522/