Форум программистов, компьютерный форум, киберфорум
Java: Сети
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
11 / 11 / 10
Регистрация: 06.10.2012
Сообщений: 675

Коллекция и TCP сервер

13.04.2014, 17:29. Показов 2040. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Клиент передаёт сообщение, сервер принимает его и отсылает его всем подключённым клиентам.
Не могу объединить коллекцию и отправку сообщений.
Java
1
2
3
4
5
public static List<Connection> connections = Collections.synchronizedList(new ArrayList<Connection>());
//добавление
Socket clientSocket = server.accept();
            talker tal = new talker(clientSocket);
            connections.add((Connection) tal);
Java
1
2
3
4
5
private BufferedReader input;
    private PrintStream output;
 
input = new BufferedReader(new InputStreamReader(client.getInputStream()));
        output = new PrintStream(client.getOutputStream());
Выдаёт ошибку здесь: ((Connection)iterator.next()).output.pri ntln(data);
Java
1
2
3
4
5
6
synchronized (main1_11Server.connections){
                        Iterator<Connection> iterator = main1_11Server.connections.iterator();
                        while (iterator.hasNext()){
                            ((Connection)iterator.next()).output.println(data);
                        }
                    }
Как по иному можно написать?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
13.04.2014, 17:29
Ответы с готовыми решениями:

TCP Клиент Сервер
Как установить соединение по сети интернет между сервером и клиентом на сокетах? Это возможно? В рамках одной сети это не сложно, но как...

Зависает TCP сервер
Многопоточный сервер, когда клиент отключается - то серверу отправляется строка &quot;stop&quot;, по которой он должен остановить поток, но...

TCP сервер на Java. Пул потоков
Доброго времени суток. Реализовываю на JAVA TCP сервер. Задача такова: принять сообщение от клиента, вывести на экран. Но клиентов...

1
ɐwʎ ɔ vǝmоɔ dиw ɐʚонɔ
 Аватар для tankomaz
443 / 442 / 100
Регистрация: 14.10.2012
Сообщений: 1,146
Записей в блоге: 9
13.04.2014, 20:39
можно вот так сделать
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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
package com.tankomaz;
 
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.GregorianCalendar;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
 
/**
 * Серверный класс консольного чата, принимает новые подключения.
 * Новое подключение запускается в отдельном потоке класса Executors, а 
 * экземпляры в List<Client> socketList.
 */
public class ServerCalculator {
    public static final GregorianCalendar TIME = (GregorianCalendar) GregorianCalendar.getInstance();
    private static final int SERVER_PORT = 8181;        
    private static List<Client> socketList = new ArrayList<>();
 
    public static void main(String[] args) {
        try (ServerSocket serverSocket = new ServerSocket(SERVER_PORT)) {
            
            ExecutorService executorService = Executors.newCachedThreadPool();
 
            while (true) {
                Socket socket = serverSocket.accept();
                Client client = new Client(socket);
                socketList.add(client);
                executorService.submit(client);
            }
 
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
 
    /**
     * Метод для посылания публичных сообщений всем участникам чата, кроме самого отправителя
     * @param message сообщение, которое необходимо передать всем участникам чата
     * @param name имя отправителя. Также используется для того, чтобы не посылать сообщение самому себе
     * @throws IOException 
     */
    public static void setMessageToAnotherUsers(String message, String name) throws IOException {
        for (Client s : socketList) {
            if (!s.getClientName().equals(name)) {
                s.getMessageFromAnotherUsers(message, name);
            }
 
        }
    }
}
 
/**
 * Класс Клиент
 */
class Client implements Runnable {
    private BufferedReader bufferedReader;
    private PrintWriter printWriter;
    private String clientName;
 
    Client(Socket socket) throws IOException {
        bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        printWriter = new PrintWriter(socket.getOutputStream(), true);
    }
 
    @Override
    public void run() {
        String str = null;
 
        try {
            getUserName();
            printWriter.println("Greeting, you connected to chat, " + clientName);
 
            while (true) {
                str = bufferedReader.readLine();
                ServerCalculator.setMessageToAnotherUsers(str, clientName);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
 
    /**
     * Метод используется для того, чтобы задать имя пользователя чата
     * @throws IOException
     */
    private void getUserName() throws IOException {
        printWriter.println("Write you name, user!");
        printWriter.flush();
        clientName = bufferedReader.readLine();
    }
 
    /**
     * Метод для принятия публичных сообщений от других участников чата с выводом времени 
     * в формате ЧЧ:ММ
     * @param message публичное сообщение, присланное любым участником чата
     * @param name имя участника чата, от которого пришло сообщение
     */
    public void getMessageFromAnotherUsers(String message, String name) {
        printWriter.println(ServerCalculator.TIME.get(GregorianCalendar.HOUR) + ":" +
                ServerCalculator.TIME.get(GregorianCalendar.MINUTE) + "  " + name + " say::" + message);
    }
 
    /**
     * @return имя клиента
     */
    public String getClientName() {
        return clientName;
    }
 
}
чтобы присоединится к чату, следует в командной строке набрать
Code
1
telnet localhost 8181
после чего спросит имя пользователя и вы в общем канале
сервак держит множество подключений одновременно, тойсь можно можно спокойно тестить и улучшать публичные сообщения
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
13.04.2014, 20:39
Помогаю со студенческими работами здесь

Поиск файла клиент-сервер TCP/IP Java
Помогите создать приложение, в котором на сервере нужно вводить имя файла, а на клиентах должен выводится путь к этому файлу. Заранее...

TCP IP Клиент - сервер
Добрый день, у меня есть 2 проекта - Клиент и Сервер Сервер import java.io.*; import java.net.*; public class Server { ...

TCP сервер на spring maven
Добрый день! Нужно написать TCP сервер (да и клиента) используя фреймворк spring Подскажите что читать и где по этой информации ...

tcp ip как клиенту найти сервер?
Есть 2 приложения: сервер и клиент, работающих на разных компьютерах. Клиенту нужен ip сервера, чтобы подключиться к нему. Проблема в...

Если сервер TCP то и клиент тоже должен быть TCP?
Я полный новичок И я так понимаю есть TCP client (Sockets), TCP server (Sockets), и ClientSocket (ScktComp), ServerSocket (ScktComp) ...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru