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

Консольное приложение способное принимать по сети сообщение

29.11.2018, 21:49. Показов 1446. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!
Я совершенно зеленый на данный момент (можно сказать 1-й класс), но есть одно задание, которое мне очень хотелось бы "решить" (получить помощь)!

Звучит оно так:

Создать консольное приложение способное принимать по сети сообщение.
Проверять их на наличие заданных констант типа String.
В случае их обнаружения выводить на консоль.
Все полученные сообщения сохранять в текстовый файл с указанием времени его получения.
Получение, обработку, запись данных проводить в многопоточном режиме без использования специализированных классов со встроенной синхронизацией.
Реализовать возможность тестирования полученного приложения.

Будет здорово, если ответы будут, как можно более развернутыми
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
29.11.2018, 21:49
Ответы с готовыми решениями:

Написать консольное приложение, способное заменять все no на yes
Напишите консольное приложение, способное заменять все no на yes using System; using System.Collections.Generic; using System.Linq; ...

Доступ к файлу Write и Read (Серверное приложение которое будет принимать данные из сети и записывать в XML)
Коротко о том, что хочу сделать.Серверное приложение которое будет принимать данные из сети и записывать в XML, вот думаю считывание и...

Консольное приложение для смены настроек сети (ipv4)
Всем привет. Помогите в разработке консольного приложения для смены настроек сети (ip адреса, маски, шлюза и днс) необходимо: 1. Что бы...

7
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4575 / 2774 / 491
Регистрация: 28.04.2012
Сообщений: 8,764
29.11.2018, 23:00
Цитата Сообщение от Muse87 Посмотреть сообщение
Будет здорово, если ответы будут, как можно более развернутыми
42

На какие вопросы?
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
29.11.2018, 23:02
Что конкретно тебе не понятно? Давай тоже поразвернутее
0
0 / 0 / 0
Регистрация: 29.11.2018
Сообщений: 4
30.11.2018, 08:47  [ТС]
Само задание и есть сплошной вопрос.
Разбил на "шаги".

1) Создать консольное приложение способное принимать по сети сообщение.
2) Проверять их на наличие заданных констант типа String.
3) В случае их обнаружения выводить на консоль.
4) Все полученные сообщения сохранять в текстовый файл с указанием времени его получения.
5) Получение, обработку, запись данных проводить в многопоточном режиме без использования специализированных классов со встроенной синхронизацией.
6) Реализовать возможность тестирования полученного приложения.


1) Создать консольное приложение способное принимать по сети сообщение.
Реализовывать буду через IntelliJ IDEA (с консольным приложением понятно). Для приёма сообщений из сети, полагаю тут надо создать клиент-серверную часть. Вот и первый вопрос: Как?

Клиент, наверное, что типа:
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
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.InputMismatchException;
import java.util.Scanner;
 
import javax.swing.JFrame;
 
 
 
public class Main  extends JFrame implements Runnable{
    static private Socket  connection;
    static private ObjectOutputStream output;
    static private ObjectInputStream input;
    PrintWriter out = null;
    BufferedReader in = null;
    Socket clientSocket = null;
    String fromServer;
    Integer port = 7777;
    Scanner scan = new Scanner(System.in);
    String command;
    Integer i1=0,i2=0;
    String toServer;
    
    public static void main(String[]args){
        
        new Thread(new Main()).start();
        new Thread(new Server()).start();
 
            
    }
Сервер, наверное, что типа:


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
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.InputMismatchException;
import java.util.Scanner;
 
import javax.swing.JFrame;
 
 
 
public class Main  extends JFrame implements Runnable{
    static private Socket  connection;
    static private ObjectOutputStream output;
    static private ObjectInputStream input;
    PrintWriter out = null;
    BufferedReader in = null;
    Socket clientSocket = null;
    String fromServer;
    Integer port = 7777;
    Scanner scan = new Scanner(System.in);
    String command;
    Integer i1=0,i2=0;
    String toServer;
    
    public static void main(String[]args){
        
        new Thread(new Main()).start();
        new Thread(new Server()).start();
Добавлено через 10 минут
2) Проверять их на наличие заданных констант типа String.
Следующий вопрос:
Если я всё правильно понимаю, то String - Текстовые строки и они могут содержать в себе только char (символы abc или абв и т.д.).
Значит надо создать метод, который читает поток и проверяет его на наличие char.
Правильно мыслю?
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
30.11.2018, 08:59
1. консольные приложения как правило не используют ни свинг ни javafx, т.к. они консольные. Примеров работы с сокетом в Гугле вагон и маленькая тележка. Например http://cs.lmu.edu/~ray/notes/javanetexamples/
2. Что имеется в виду в твоём задании спрашивай у того, кто тебе это задание дал.
0
0 / 0 / 0
Регистрация: 29.11.2018
Сообщений: 4
30.11.2018, 09:30  [ТС]
3) В случае их обнаружения выводить на консоль.
Далее вопрос:
Обрабатывая потоки и находя в них char выводить на консоль system.out.println
Тут вроде ясно

Добавлено через 16 минут
4) Все полученные сообщения сохранять в текстовый файл с указанием времени его получения.
И вопрос:
Что-то типа этого?

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class Time_writer {
   Time_writer() {
     try {
       FileWriter fw = new FileWriter("time.txt", true);
       PrintWriter out = new PrintWriter(fw);
       DateFormat dateF = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
       Calendar cal = Calendar.getInstance();
       String time = dateF.format(cal.getTime());
       out.print(time);
       out.close();
      } catch(Exception e) {
        e.printStackTrace();
      }
    }
  public static void main(String[] args) {
     new Time_writer();
  }
}
Добавлено через 7 минут
5) Получение, обработку, запись данных проводить в многопоточном режиме без использования специализированных классов со встроенной синхронизацией.

Bопрос:

Возможно через Thread, а синхронизировать synchronized?

Добавлено через 6 минут
6) Реализовать возможность тестирования полученного приложения.

Вопрос:

Скорее всего через JUnit и тест прописываться будет так:
С сервера высылаются 10 вариантов сообщений и допустим 5 из них Char остальные цифрокадабры.
Далее просто проверяется выполнение условии.
Примерно так?
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
30.11.2018, 09:33
Цитата Сообщение от Muse87 Посмотреть сообщение
Что-то типа этого?
ты делать начни, по ходу поймешь
Например я подозреваю, что файл должен быть один, видимо доступ к файлу как раз и будешь синхронизировать
0
0 / 0 / 0
Регистрация: 29.11.2018
Сообщений: 4
01.12.2018, 19:19  [ТС]
И так получилось заимствовать клиент-сервер. Полностью работоспособен.

Сервер

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
package edu.lmu.cs.networking;
import java.net.ServerSocket;
import java.net.Socket;
import java.io.*;
 
 
 
public class Server {
    public static void main(String[] ar)    {
        int port = 6666; // случайный порт (может быть любое число от 1025 до 65535)
        try {
            ServerSocket ss = new ServerSocket(port); // создаем сокет сервера и привязываем его к вышеуказанному порту
            System.out.println("Waiting for a client...");
 
            Socket socket = ss.accept(); // заставляем сервер ждать подключений и выводим сообщение когда кто-то связался с сервером
            System.out.println("Got a client :) ... Finally, someone saw me through all the cover!");
            System.out.println();
 
            // Берем входной и выходной потоки сокета, теперь можем получать и отсылать данные клиенту.
            InputStream sin = socket.getInputStream();
            OutputStream sout = socket.getOutputStream();
 
            // Конвертируем потоки в другой тип, чтоб легче обрабатывать текстовые сообщения.
            DataInputStream in = new DataInputStream(sin);
            DataOutputStream out = new DataOutputStream(sout);
 
            String line = null;
            while(true) {
                line = in.readUTF(); // ожидаем пока клиент пришлет строку текста.
                System.out.println("The dumb client just sent me this line : " + line);
                System.out.println("I'm sending it back...");
                out.writeUTF(line); // отсылаем клиенту обратно ту самую строку текста.
                out.flush(); // заставляем поток закончить передачу данных.
                System.out.println("Waiting for the next line...");
                System.out.println();
            }
        } catch(Exception x) { x.printStackTrace(); }
    }
}



Клиент

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
package edu.lmu.cs.networking;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.Socket;
import java.io.*;
import java.net.*;
 
 
 
 
public class Client {
    public static void main(String[] ar) {
        int serverPort = 6666; // здесь обязательно нужно указать порт к которому привязывается сервер.
        String address = "127.0.0.1"; // это IP-адрес компьютера, где исполняется наша серверная программа.
        // Здесь указан адрес того самого компьютера где будет исполняться и клиент.
 
        try {
            InetAddress ipAddress = InetAddress.getByName(address); // создаем объект который отображает вышеописанный IP-адрес.
            System.out.println("Any of you heard of a socket with IP address " + address + " and port " + serverPort + "?");
            Socket socket = new Socket(ipAddress, serverPort); // создаем сокет используя IP-адрес и порт сервера.
            System.out.println("Yes! I just got hold of the program.");
 
            // Берем входной и выходной потоки сокета, теперь можем получать и отсылать данные клиентом.
            InputStream sin = socket.getInputStream();
            OutputStream sout = socket.getOutputStream();
 
            // Конвертируем потоки в другой тип, чтоб легче обрабатывать текстовые сообщения.
            DataInputStream in = new DataInputStream(sin);
            DataOutputStream out = new DataOutputStream(sout);
 
            // Создаем поток для чтения с клавиатуры.
            BufferedReader keyboard = new BufferedReader(new InputStreamReader(System.in));
            String line = null;
            System.out.println("Type in something and press enter. Will send it to the server and tell ya what it thinks.");
            System.out.println();
 
            while (true) {
                line = keyboard.readLine(); // ждем пока пользователь введет что-то и нажмет кнопку Enter.
                System.out.println("Sending this line to the server...");
                out.writeUTF(line); // отсылаем введенную строку текста серверу.
                out.flush(); // заставляем поток закончить передачу данных.
                line = in.readUTF(); // ждем пока сервер отошлет строку текста.
                System.out.println("The server was very polite. It sent me this : " + line);
                System.out.println("Looks like the server is pleased with us. Go ahead and enter more lines.");
                System.out.println();
            }
        } catch (Exception x) {
            x.printStackTrace();
        }
    }
}

Теперь надо реализовать запись в текстовый файл, но перед этим надо проверить входящие сообщения на тип String, но сначала может нужна многопоточность???
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
01.12.2018, 19:19
Помогаю со студенческими работами здесь

Нужно приложение которое будет отсылать и принимать небольшие сообщение по wifi
Здравствуй народ. нашел задачу которая меня так заинтересовала что уже 4 день не знаю с чего начать. суть : есть wifi карта....

Передать сообщение в консольное приложение
К сожалению не получается ни как передать сообщения в консольное приложение на Питоне из программы сделанной в Лазарусе... Запуск...

Приложение способное заключать слово в двойные кавычки
Уважаемые форумчане! Необходимо написать приложение на C# способное заключать каждое слово в строке в двойные кавычки. Не подскажите?

Как открыть консольное приложение в .NET через другое консольное приложение .NET
Есть один вопрос. Как открыть консольное приложение .NET через другое консольное приложение .NET, чтобы при этом второе приложение...

консольное приложение (при запуске приложение открывалось на весь экран)
Как сделать, чтобы при запуске приложение открывалось на весь экран?


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru