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

Клиент - Сервер

10.03.2015, 18:57. Показов 1926. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый вечер!
Сижу, разбираюсь с TCP клиентом-сервером.. Задача такая: клиент посылает серверу любое число n, а сервер возвращает массив размером n, состоящий из рандомных чисел .
Всё кажется работает, только сервер выдаёт всегда вопросительные знаки
В чём проблема, может кто-нибудь подскажет?
Заранее благодарю

Сервер:
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
import java.net.*;
import java.io.*;
import java.util.Random;
 
public class Server {
    public static void main(String[] args) {
        ServerSocket serverSocket = null;
        Socket clientAccepted = null;
        ObjectInputStream sois = null;
        ObjectOutputStream soos = null;
        String clientMessageReceived;
        String serverMessageSent = null;
        int numberReceived;
        Random random = new Random();
        
        try{
            System.out.println("Сервер начал работу!");
            serverSocket = new ServerSocket (2527);
            clientAccepted = serverSocket.accept();
            sois = new ObjectInputStream (clientAccepted.getInputStream());
            soos = new ObjectOutputStream (clientAccepted.getOutputStream());
            clientMessageReceived = (String) sois.readObject();
            while (! clientMessageReceived.equals("exit")){
                numberReceived = Integer.parseInt(clientMessageReceived);
                int sizeOfArray=numberReceived;
                char array[];
                array = new char [sizeOfArray];
                for (int i=0; i<sizeOfArray; i++){
                    array[i] = (char) random.nextInt();
                }
                for (int j=0; j<sizeOfArray; j++){
                    serverMessageSent = array[j] + " ";
                }
                
                soos.writeObject(serverMessageSent);
            }
        } catch (Exception e){
            System.out.println("Ошибка: "+e);
        } finally{
            try{
                sois.close();
                soos.close();
                clientAccepted.close();
                serverSocket.close();
            } catch (Exception e){
                System.out.println("Ошибка: "+e);
            }
        }
    }
}


Клиент:
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
import java.io.*;
import java.net.*;
 
public class Client {
    public static void main(String[] args) {
        String message;
        
        try{
            System.out.println("Подключение к серверу...");      
            @SuppressWarnings("resource")
            Socket clientSock = new Socket("127.0.0.1", 2527);
            System.out.println("Соединение установлено!");
            
            ObjectOutputStream coos = new ObjectOutputStream (clientSock.getOutputStream());
            BufferedReader stdin = new BufferedReader (new InputStreamReader (System.in));
            ObjectInputStream cois = new ObjectInputStream (clientSock.getInputStream());
 
            System.out.println("----------\n\tПожалуйста, введите число");
            message = stdin.readLine(); 
            
            System.out.println("----------\n\tВы ввели: "+message);
            
            while(! message.equals("exit")){
                coos.writeObject(message);
                System.out.println("----------\n\tОтвет сервера: "+ cois.readObject());
                
                System.out.println("----------\n\tПожалуйста, введите число");
                message = stdin.readLine(); 
                System.out.println("----------\n\tВы ввели: "+message);
            }
            if (message.equals("exit")){
                System.out.println("До свидания!");
                System.exit(0);
            }
            coos.close();
            cois.close();
            clientSock.close();
        
        } catch (Exception e){
            System.out.println("Ошибка: "+e);
        }
    }
}
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
10.03.2015, 18:57
Ответы с готовыми решениями:

Клиент-сервер
Сам я недавно начал изучать Java и не знаю весь его синтаксис. Но столкнулся с задачей сделать простой клиент-сервер, решающий простую...

Сервер-клиент
Имеется сервер и два клиента. Необходимо получить подтверждение от обоих клиентов. Код потока сервера: package server; import...

Клиент сервер
Всем привет, возник такой вопрос, вот у меня есть сервер на java, такой простенький, и клиент (приложение на андройде), они обмениваются...

9
 Аватар для ne2win
206 / 206 / 71
Регистрация: 25.02.2014
Сообщений: 569
10.03.2015, 22:14
Java
1
array[i] = (char) random.nextInt()
Перепишите эту часть, здесь присваивается символ по Unicode
1
1 / 1 / 0
Регистрация: 04.12.2013
Сообщений: 114
10.03.2015, 22:21  [ТС]
Цитата Сообщение от Kochmarik Посмотреть сообщение
Перепишите эту часть, здесь присваивается символ по Unicode
Спасибо! Я была сделала интовским массивом, но не понимаю, как мне этот интовский массив сделать строкой. Например, у меня выводятся числа в одну строку, а хотелось бы, чтобы были пробелы. И вот как перегнать этот массив в строку с пробелами что-то не могу придумать...
0
 Аватар для ne2win
206 / 206 / 71
Регистрация: 25.02.2014
Сообщений: 569
10.03.2015, 22:30
kot_prav,
Java
1
2
3
 for (int j=0; j<sizeOfArray; j++){
                    serverMessageSent += array[j] + " ";
                }
1
1 / 1 / 0
Регистрация: 04.12.2013
Сообщений: 114
11.03.2015, 00:29  [ТС]
Цитата Сообщение от Kochmarik Посмотреть сообщение
for (int j=0; j<sizeOfArray; j++){
* * * * * * * * * * serverMessageSent += array[j] + " ";
* * * * * * * * }
спасибо! Я попробую

Добавлено через 1 час 57 минут
Я кажется смогла это всё вывести, при первом запросе всё проходит хорошо, а вот уже, если 2-ой раз забивать какое-нибудь число, то размер массива не меняется
Не подскажите, где ошибка?

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
import java.net.*;
import java.io.*;
import java.util.Arrays;
import java.util.Random;
 
public class Server {
    
    public static void main(String[] args) {
        ServerSocket serverSocket = null;
        Socket clientAccepted = null;
        ObjectInputStream sois = null;
        ObjectOutputStream soos = null;
        String clientMessageReceived;
        String serverMessageSent = null;
        int numberReceived;
        Random random = new Random();
        boolean flag=true;
        
        try{
            System.out.println("Сервер начал работу!");
            serverSocket = new ServerSocket (2530);
            while(true){
                clientAccepted = serverSocket.accept();
                sois = new ObjectInputStream (clientAccepted.getInputStream());
                soos = new ObjectOutputStream (clientAccepted.getOutputStream());
                clientMessageReceived = (String) sois.readObject();
                while (flag==true){
                    numberReceived = Integer.parseInt(clientMessageReceived);
                    int sizeOfArray=numberReceived;
                    int[] array;
                    
                    if(clientMessageReceived==null){
                        flag=false;
                    }
                    
                    array = new int [sizeOfArray];
                    for (int i=0; i<sizeOfArray; i++){
                        array[i] = (int) Math.abs(random.nextInt(15));
                        serverMessageSent = Arrays.toString(array);
                    }
                    
                    soos.writeObject(serverMessageSent);
                }
            }
            
        } catch (Exception e){
            System.out.println("Ошибка: "+e);
        } finally{
            try{
                sois.close();
                soos.close();
                clientAccepted.close();
                serverSocket.close();
            } catch (Exception e){
                System.out.println("Ошибка: "+e);
            }
        }       
    }
}


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
import java.io.*;
import java.net.*;
 
public class Client {
    public static void main(String[] args) {
        String message;
        String messageClient;
        int number;
        
       
        try{
            System.out.println("Подключение к серверу...");     
            Socket clientSock = new Socket("127.0.0.1", 2530);
            System.out.println("Соединение установлено!");
            
            ObjectOutputStream coos = new ObjectOutputStream (clientSock.getOutputStream());
            BufferedReader stdin = new BufferedReader (new InputStreamReader (System.in));
            ObjectInputStream cois = new ObjectInputStream (clientSock.getInputStream());
 
            while(true){
                System.out.println("----------\n\tПожалуйста, введите число");
                message = stdin.readLine(); 
                number = Integer.parseInt(message);
            
                if(number==0){
                    coos.writeObject(null);
                    break;
                }
                        
                coos.writeObject(message);
  
                messageClient  = (String) cois.readObject();
                System.out.println("----------\n\tОтвет сервера: \n"+messageClient);
            }
            
            coos.close();
            cois.close();
            clientSock.close();
        
        } catch (Exception e){
            System.out.println("Ошибка: "+e);
        }
    }
}
0
 Аватар для ne2win
206 / 206 / 71
Регистрация: 25.02.2014
Сообщений: 569
11.03.2015, 00:39
Лучший ответ Сообщение было отмечено kot_prav как решение

Решение

kot_prav,
Java
1
clientMessageReceived = (String) sois.readObject();
Это должно быть в цикле
1
1 / 1 / 0
Регистрация: 04.12.2013
Сообщений: 114
11.03.2015, 00:46  [ТС]
Цитата Сообщение от Kochmarik Посмотреть сообщение
Это должно быть в цикле
Точно. Всё-таки ночью заниматься - не самая лучшая идея)
Знаете, теперь всё работает, кроме одного: когда я выключаю первого клиента, и хочу запустить второго, то выбивает ошибки..
0
 Аватар для ne2win
206 / 206 / 71
Регистрация: 25.02.2014
Сообщений: 569
11.03.2015, 01:01
kot_prav, Это из другой области проблема, здесь вам нужно в одном потоке слушать клиентов, в других обрабатывать
0
1 / 1 / 0
Регистрация: 04.12.2013
Сообщений: 114
11.03.2015, 06:30  [ТС]
Цитата Сообщение от Kochmarik Посмотреть сообщение
kot_prav, Это из другой области проблема, здесь вам нужно в одном потоке слушать клиентов, в других обрабатывать
Вы, кажется, говорите про параллельное подключение, а я хочу сделать последовательное.. :Р
0
 Аватар для ne2win
206 / 206 / 71
Регистрация: 25.02.2014
Сообщений: 569
11.03.2015, 08:11
kot_prav, В любом случае, чтобы подключиться к серверу, он должен ждать подключения
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.03.2015, 08:11
Помогаю со студенческими работами здесь

Клиент-сервер
Надо написать приложение клиент-сервер, один сервер, много клиентов. В какую сторону смотреть? Давайте пожалуйста ссылки, литературу.

Клиент - Сервер
Всем привет! Тут такое дело, написал клиент и сервер, клиент должен передать объект серверу, а потом после обработки сервер должен в ответ...

Клиент-сервер
Здравствуйте, задача написать клиент-сервер. Принцип такой: есть сервер и несколько клиентов, как только на одном из клиентов изменяется...

Клиент сервер
Здравствуйте, нужна помощь с программой Мне нужно: Клиент посылает два числа серверу и одну из математических операций: «*», «/», «+»,...

Клиент-сервер
Доброго времени суток всем. Обращаюсь с просьбой помочь с клиент-серверным приложением. Необходимо реализовать клиент-серверное...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru