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

Передача числа от клиента другому клиенту через сервер

02.06.2018, 20:38. Показов 1636. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!

Возникла проблема. Передаю на сервер число (с помощью метода writeInt()). Сервер считывает число от клиента с помощью метода readInt(), если на клиенте использовать этот же метод, то получается что сервер ждет когда придет число и клиент ждет когда придет число от сервера. Сервер принимает число и должен отправлять другому клиенту. Как в таком случае с сервера отправлять данные другому клиенту?

В коде вопросами отмечены места, где это возникает.

P.S. Может у кого-нибудь есть простая программа для обмена данными между клиентами через сервер. Скиньте пожалуйста!

Клиент:
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
public class Client extends Thread{
    String host = "localhost";
    int port = 1050;
    DataOutputStream outStream;
    DataInputStream inStream;
    Socket sock, sock1;
    boolean isBlack = false;
    boolean isRed = false;
    int choose = -1;
    int xx = -1, yy = -1, xxx = -1, yyy = -1;
    
     public Client(){
            System.out.println(">> Client's running");
    }
    public void zapros(int c, int x, int y){
        choose = c;
        xx = x;
        yy = y;
    }
     
    public void run(){
        String host = "localhost";
        int port  = 3333; 
        try{
            sock = new Socket(host, port);
            sock1 = new Socket(host, 3334);
            outStream = new DataOutputStream(sock.getOutputStream());
            inStream = new DataInputStream(sock1.getInputStream());
        }catch(Exception e){System.err.println(e);}
        while (true){
        try {
            // получается что я жду число с сервера и при этом не могу отправлять запросы на сервер ?????????????????
            int a = inStream.readInt(); //???????????????????????
            switch(choose){
                case 100:
                    outStream.writeInt(choose);
                    int type = inStream.readInt();
                    if (type == 101){isBlack = true;}
                    if (type == 102){isRed = true;}
                    System.out.println(type);
                    choose = -1; xx = -1; yy = -1;
                break;
                case 1:
                    outStream.writeInt(choose);
                    outStream.writeInt(xx);
                    outStream.writeInt(yy);
                    System.out.println(xx + " " + yy);
                    choose = -1; xx = -1; yy = -1;
                break;
            }
            int server = inStream.readInt();
            if (server == 1){
                xxx = inStream.readInt();
                yyy = inStream.readInt();;
                System.out.println(xxx + " " + yyy);
            }
        } catch (IOException ex) {}
    }
    }
}
Сервер:
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
public class Server extends Thread{
    Vector<ServerConnectionProcessor> clients = new Vector<>();
    Server(){
    }    
    public void run(){
        try{ 
            System.out.println("Server is running");
            int port  = 3333;
            ServerSocket ss = new ServerSocket(port);
            ServerSocket sss = new ServerSocket(3334);
            int k = 1;
            while (true)         {
                Socket s = ss.accept();
                Socket s1 = sss.accept();
                ServerConnectionProcessor p = new ServerConnectionProcessor(s, s1);
                p.id = k;
                p.start();
                clients.add(p);
                k++;
            }
        }catch(Exception e){ System.out.println(e);}  
    }
 
class ServerConnectionProcessor extends Thread{  
    private Socket sock, sock1; 
    boolean isWork = true;
    int id = 0;
    DataInputStream inStream;
    DataOutputStream outStream;
    public ServerConnectionProcessor(Socket s, Socket s1){  
        sock = s;
        sock1 = s;
    } 
    public void run(){
        try{ 
            inStream = new DataInputStream(sock.getInputStream());
            outStream = new DataOutputStream(sock.getOutputStream());
            while (isWork){
                // сервер ждет когда клиент отправит запрос ???????????????????
                int choose = inStream.readInt();// ??????????????????
                try {
                    switch(choose){
                        case 100:
                            int a = 101;
                            int b = 102;
                            if (clients.size() % 2 == 0) outStream.writeInt(a);
                            if (clients.size() % 2 != 0) outStream.writeInt(b);
                        break;
                        case 1:
                            int xx = inStream.readInt();
                            int yy = inStream.readInt();
                             System.out.println(xx + " " + yy);
                            if (id == 1){
                                clients.get(1).sendCoordin(xx,yy);
                            }
                            if (id == 2){
                                clients.get(0).sendCoordin(xx,yy);
                            }
                            System.out.println(xx + " " + yy+" " + id);
                        break;
                    }
                    outStream.writeInt(-5);
                }catch (IOException ex) {}   
            //sleep(1000);
            }  
        }catch(Exception e){ System.out.println(e);}  
        
    }  
    public void sendCoordin(int x, int y){
        try {
            outStream.writeInt(1);
            outStream.writeInt(x);
            outStream.writeInt(y);
        } catch (IOException ex) {} 
    }
}// end class ServerConnectionProcessor
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
02.06.2018, 20:38
Ответы с готовыми решениями:

Передача файлов от клиента к клиенту, минуя сервер(как в icq).
Доброго времени суток! Имеется простенький сервер и клиент, основанные на сокетах(TClientSocket и TServerSocket). Сервер...

Передача от клиента к серверу и от сервера к клиенту через канал fifo()
Всем привет. Мне нужно через канал fifo отправить от клиента к серверу строку, сервер должен записать ее с задом-наперед и передать ее к...

Как передать звук по сети от клиента клиенту через сервер
Всем Привет! Народ помогите подскажите... Пишу программу с использованием WPF и мне нужно передать звук от одного клиента другому......

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

Сокеты(Пердача от одного клиента к другому через сервер)
Добрый день,начал изучать сокеты в java,нашёл хорошую статью с примером! Server import java.net.*; import java.io.*; public class...

Boost Asio Передача файла от клиента к клиенту
Есть у кого нибудь реализация сервера-передатчика для передачи файлов от клиента к клиенту?

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

Передача сервер к выбраному клиенту (многопоточный)
using System; using System.Collections.Generic; using System.Net.Sockets; using System.Text; using System.Threading; using...

Передача файла с клиента на сервер
Помогите надо сделать передачу между клиентом - сервером. Пример если в клиенти выбрать файл то он отправиться на сервер.


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
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 —. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru