Форум программистов, компьютерный форум, киберфорум
Java: Сети
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
1 / 1 / 0
Регистрация: 04.12.2013
Сообщений: 114

UDP: невозможно добавление нового клиента

20.03.2015, 12:38. Показов 553. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Разбираюсь с UDP, задание такое: дано выражение https://www.cyberforum.ru/cgi-bin/latex.cgi?sum_{n=a}^{b}(n*(n-1)) - \sum_{n=b}^{c} 2n / (n-1). У клиента спрашивают коэффициенты a, b, c, сервер подсчитывает всё, но в двух частях: каждую сумму в отдельности. Всё подсчитывается, но проблема, чтобы последовательно подключались новые клиенты, вроде и циклы создала, но что-то после завершения работы первого клиента, всё выключается, да и кучу исключений выкидывает. I need somebody's heeelp!


Сервер:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
import java.net.*;
import java.nio.ByteBuffer;
import java.io.*;
 
public class Server {
    public final static int DEFAULT_PORT = 8005;
    
    public void runServer(){
        DatagramSocket s = null;
        byte [] buf = new byte [1000];
        try {
            s = new DatagramSocket (DEFAULT_PORT);
            System.out.println("Сервер начал работу!");
            while (true){
                double b=0, c=0;
                int a;
                DatagramPacket recv = new DatagramPacket (buf, buf.length);
                
                while (true){
                    s.receive(recv);
                    String ahelp = new String (recv.getData()).trim();
                    a = Integer.parseInt(ahelp);
                    
                    if (a == 123){
                        System.out.println("Client закончил работу!");    
                        break;
                    }
                    
                    if (a == 12345){
                        System.out.println("Server закончил работу!");    
                        break;
                    }
                    s.receive(recv);
                    String bhelp = new String (recv.getData()).trim();
                    b = Double.parseDouble(bhelp);
                    s.receive(recv);
                    String chelp = new String (recv.getData()).trim();
                    c = Double.parseDouble(chelp);
                    
                    System.out.println("Принятые значения: " + a + ", " + b + ", " + c);
                    double firstHalf = 0;
                    double n = (double) a;
                    for (int i = a; i <= (int) b ; i++){
                        firstHalf += (n*(n-1));
                        n++;
                    }
                    
                    double secHalf = 0;
                    double m = b;
                    for (int j = (int) b; j <= (int) c; j++){
                        secHalf += (double) (2*m)/(m-1);
                        if ((m-1)==0){
                            System.out.println("Деление на ноль запрещено!");
                            break;
                        }
                        m++;
                    }
                    
                    String resHelp = null;
                    double res = firstHalf - secHalf;
                    System.out.println("Result: " + res);
                    resHelp = Double.toString(res);
                    buf = resHelp.getBytes();
                    DatagramPacket send = new DatagramPacket (buf, buf.length, InetAddress.getByName("127.0.0.1"), DEFAULT_PORT);
                    s.send(send);               
            } 
                s.close();
        }
        } catch (SocketException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } 
    }
    
    public static void main(String[] args) {
        Server s1 = new Server();
        s1.runServer();
    }
}


Клиент:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
import java.io.*;
import java.math.BigInteger;
import java.net.*;
 
public class Client {
    public final static int DEFAULT_PORT = 8005;
    public void runClient(){
        DatagramSocket s = null;
        try{
            byte [] bufA = new byte [1000];
            byte [] bufB = new byte [1000];
            byte [] bufC = new byte [1000];
            byte [] bufResult = new byte [1000];
            
            while (true){
                s = new DatagramSocket ();
                System.out.println("UDP-клиент начал работу!");
                
                BufferedReader br = null;
                String a = null;
                String b = null;
                String c = null;
                
                br = new BufferedReader (new InputStreamReader (System.in));
                System.out.println("Пожалуйста, введите a, если хотите выйти, введите 123, если хотите выключить сервер, введите 12345");
                a = br.readLine();
                if (Integer.parseInt(a)==123){
                    a.toString();
                    bufA = a.getBytes();
                    DatagramPacket sendPacketA = new DatagramPacket (bufA, bufA.length, InetAddress.getByName("127.0.0.1"), DEFAULT_PORT);
                    s.send(sendPacketA);
                    System.out.println("Клиент закончил работу!");
                    break;
                }
                System.out.println("Пожалуйста, введите b");
                b = br.readLine();
                System.out.println("Пожалуйста, введите c");
                c = br.readLine();
                bufA = a.getBytes();
                bufB = b.getBytes();
                bufC = c.getBytes();
                
                System.out.println("А = "+bufA);
                System.out.println("B = "+bufB);
                System.out.println("C = "+bufC);
                             
                DatagramPacket sendPacketA = new DatagramPacket (bufA, bufA.length, InetAddress.getByName("127.0.0.1"), DEFAULT_PORT);
                s.send(sendPacketA);
                DatagramPacket sendPacketB = new DatagramPacket (bufB, bufB.length, InetAddress.getByName("127.0.0.1"), DEFAULT_PORT);
                s.send(sendPacketB);
                DatagramPacket sendPacketC = new DatagramPacket (bufC, bufC.length, InetAddress.getByName("127.0.0.1"), DEFAULT_PORT);
                s.send(sendPacketC);
                
                DatagramPacket recvResult = new DatagramPacket (bufResult, bufResult.length);
                s.receive(recvResult);
                String res = new String (recvResult.getData()).trim();
                
                System.out.println("Ответ: " + res);
            }
            s.close();
        } catch (IOException e){
            e.printStackTrace();
        }
    }
        
    public static void main(String[] args)  {
        Client cl1 = new Client();
        cl1.runClient();        
    }
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
20.03.2015, 12:38
Ответы с готовыми решениями:

Добавление нового объекта
Как при помощи ссылок в java создать метод по добавлению нового объекта в массив объектов(например,-новый номер в справочник) ? что делать...

Как отловить подсоединение нового клиента к серверу на базе UDP
Здравствуйте, подскажите пожалуйста как отловить подсоединение нового клиента к серверу на базе UDP? На ТСР это делаю так: Socket...

Исходники UDP клиента на Objective-C
Здравствуйте! Подскажите, пожалуйста, где можно скачать исходники UDP-клиента на Objective-C. Знаю про CocoaAsyncSocket, но в нем...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
20.03.2015, 12:38
Помогаю со студенческими работами здесь

Как оппределить ip UDP клиента в c#
здравствуйте! помогите пожалуйста определить ip udp клиента! что необходимо переделать или дописать, чтобы это сделать в следующем коде: ...

Взаимодействие клиента и сервера UDP
Хочу чтобы была взаимная передача строк между клиентом и сервером. Добился односторонней передачи. Вот сделал 2 стороннюю, но получается...

Передача данных по UDP - порт клиента
Доброго всем дня. Начал работать с UDP. И столкнулся вот с такой (простой вроде бы) проблемой. Есть 2 программы: клиент и сервер....

Готовый UDP client/server - настройка Клиента
Ребята нужна ваша помощь , я уже программу сделал как она должна выглядеть там UDP server и UDP Client / UDP сервер работает , мне просто...

Как передать картинку от клиента к серверу по UDP?
Здравствуйте! подскажите как передать картинку от IdUDPClient1 к IdUDPServer1 чтобы на IdUDPServer1 отобразилась в image1. Спасибо!


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru