java - 在客户端/服务器应用程序中将元素添加到服务器端的 arrayList

标签 java arraylist client-server

我制作了一个客户端/服务器应用程序,其中客户端迭代一些数字,并将每个数字发送到服务器。现在我想将这个数字添加到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/

相关文章:

java - 如何获得列表的非包含子集?

java - 有没有办法从 ArrayList.toString() 获得的字符串中获得 ArrayList?

python - 如何将数据从 TCP Python 服务器发送到客户端,反之亦然?

java - tomcat 5.5 可以处理的最大并发用户数

c - 具有多个客户端 C/unix 的简单 TCP 服务器

java - 2.0版本(现在添加查询)

用于防止重复订单的 Java 同步选项(文件、数据库锁定?)

Java - 对 ArrayList 中的对象中的整数进行排序

java - 加载具有父子关系的类时出现 LinkageError

java - 代码跳转到注册应用中创建帐户坚持的错误语句