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

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

10.04.2014, 15:32. Показов 2812. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Сам я недавно начал изучать Java и не знаю весь его синтаксис. Но столкнулся с задачей сделать простой клиент-сервер, решающий простую задачу: складывание 2 чисел(например, сервер отправляет 2 числа, а клиент их складывает и отправляет результат обратно). В сети в основном примеры по созданию обмена сообщениями между клиентом и сервером. Я в них разобрался, как только начал изучать данную тему. Но так и не наткнулся на подобный моему пример\статью, где бы более менее объяснялось, как это сделать.
А еще желательнее пример с функцией типа cosx. Как клиент понимает, что это косинус, а не что-то еще.

пока более менее понимаю, как работает это:
C++
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
package server;
 
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.logging.Level;
import java.util.logging.Logger;
 
 
public class main {
 
 
    public static void main(String[] args) {
        try {
            ServerSocket ss = new ServerSocket(6666);
            while(true){
            Socket socket = ss.accept();
            
            DataInputStream dis = new DataInputStream(socket.getInputStream());
            DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
            
            System.out.println(dis.readUTF());
            
            dos.writeUTF("Это строка от сервера!");
            dos.flush();
        }
            
                    } catch (IOException ex) {
            System.out.println("Невозможно запустить сервер!");
        }
    }
    
}
C++
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
package client;
 
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.util.logging.Level;
import java.util.logging.Logger;
 
public class main {
    public static void main(String[] args) {
        try {
            Socket socket = new Socket("localhost", 6666);
            
            DataInputStream dis = new DataInputStream(socket.getInputStream());
            DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
            
            dos.writeUTF("Это строка переданная от клиента!");
            dos.flush();
            
            System.out.println(dis.readUTF());
            
        } catch (IOException ex) {
            System.out.println("Не удалось подключиться к серверу!");
        }
    
    }
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
10.04.2014, 15:32
Ответы с готовыми решениями:

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

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

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

5
ɐwʎ ɔ vǝmоɔ dиw ɐʚонɔ
 Аватар для tankomaz
443 / 442 / 100
Регистрация: 14.10.2012
Сообщений: 1,146
Записей в блоге: 9
11.04.2014, 00:53
придумайте определенный синтаксис для запроса, чтобы сервер понимал что вы от него хотите, например
calc 2 + 2
сервер анализировал бы "до первого пробела", понимал бы что нужно выполнить миссию калькулятора, потом нашел бы знак - а два значения, сложил бы и вернул
0
1 / 1 / 0
Регистрация: 21.03.2014
Сообщений: 38
13.04.2014, 17:28  [ТС]
К сожалению, без обучающего примера или статьи ничего не получится у меня, ибо попросту никогда этого не делал.
Поэтому я и обращаюсь к знающим людям, которые могли бы дать наводку на материал. А по материалу бы я сам разобрался.
0
 Аватар для reisal78
944 / 687 / 230
Регистрация: 28.04.2013
Сообщений: 1,925
13.04.2014, 17:58
GreenMan1899, так все что "посложнее" у вас уже сделано.

Не по теме:

кстати как то не совсем логично

сервер отправляет 2 числа, а клиент их складывает и отправляет результат обратно
обычно делается на оборот... но не суть



Вы, к примеру, отправляете строку вот такую (что бы понятнее было по русски): "сложить 2 2". в том приложении получателе "разбираете" ее по словам. и далее в зависимости от первого слова выполняете действия на другими словами.
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
        String reply;
        String s = "сложить 2 2";
 
        String[] array = s.split(" ");
        int a = Integer.parseInt(array[1]); //преобразую в int
        int b = Integer.parseInt(array[2]); //преобразую в int
        switch (array[0]) {
            case "сложить":
                reply = (a + b) + ""; //складываю и  результат превращаю в строку
                break;
            default:
                break;
        }
а дальше строку reply возвращаете назад.

То что я написал на самом деле первые главы книг для новичков.
1
43 / 43 / 15
Регистрация: 10.09.2013
Сообщений: 293
13.04.2014, 18:04
Я когда-то делал вот таким образом:
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
public class Client {
 
    public static final int CALC = 1;
    public static final int SIN = 2;
    public static final int COS = 3;
   
    public static void main(String[] args) {
        try {
            Socket socket = new Socket("localhost", 6666);
            
            DataInputStream dis = new DataInputStream(socket.getInputStream());
            DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
            
            dos.writeInt(CALC);
            dos.writeUTF("2+2");
            System.out.println("2 + 2 = " + dis.readUTF());
            
            dos.writeInt(SIN);
            dos.writeUTF("90");
            System.out.println("sin(90) = " + dis.readUTF());
            
            dos.writeInt(COS);
            dos.writeUTF("90");
            System.out.println("cos(90) = " + dis.readUTF());
            dos.flush();
            
        } catch (IOException ex) {
            System.out.println("Не удалось подключиться к серверу!");
        }
    }
    
}
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
public class Server {
 
    public static final int CALC = 1;
    public static final int SIN = 2;
    public static final int COS = 3;
 
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        try {
            ServerSocket ss = new ServerSocket(6666);
            Socket socket = ss.accept();
 
            DataInputStream dis = new DataInputStream(socket.getInputStream());
            DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
            while (true) {
 
                int code = dis.readInt();
                switch (code) {
                    case CALC:
                        calc(dis, dos);
                        break;
                    case SIN:
                        sin(dis, dos);
                        break;
                    case COS:
                        cos(dis, dos);
                        break;
                    default:
                        System.out.println("Unknown code..");
                        break;
 
                }
 
            }
 
        } catch (IOException ex) {
            System.out.println("Невозможно запустить сервер!");
        }
    }
 
    public static void calc(DataInputStream in, DataOutputStream out) throws IOException {
        String[] str = in.readUTF().split("[+]");
        System.out.println(str.length);
        out.writeUTF(String.valueOf(Integer.valueOf(str[0]) + Integer.valueOf(str[1])));
    }
 
    public static void sin(DataInputStream in, DataOutputStream out) throws IOException {
        double number = Double.valueOf(in.readUTF());
        out.writeUTF(String.valueOf(Math.sin(number)));
    }
 
    public static void cos(DataInputStream in, DataOutputStream out) throws IOException {
        double number = Double.valueOf(in.readUTF());
        out.writeUTF(String.valueOf(Math.cos(number)));
    }
 
}
1
1 / 1 / 0
Регистрация: 21.03.2014
Сообщений: 38
15.05.2014, 14:57  [ТС]
Здравствуйте еще раз.
Все еще вожусь с клиент-сервером. Но уже само задание другое и серверов несколько.
Имеется строка с шестью числами через пробел на сервере с ограничением на 3 клиентов.
Клиент разбивает этот "массив" (никакой это не массив, просто слово другого не смог подобрать) на 3 куска и отправляет клиентам, чтобы они каждый свой кусок отсортировали и вернули серверу, чтобы что-то еще дальше сделать, но до этого еще дойти надо
Так вот
1. у меня при описании сервера есть переменная i? с помощью с помощью которой я и подсчитываю клиенты и обрубаю подключения новых, когда i>3. Хотя в мануале написано про какой-то backlog.
.
.
.
public ServerSocket(int port,
int backlog)
throws IOException
Creates a server socket and binds it to the specified local port number, with the specified backlog. A port number of 0 creates a socket on any free port.
.
.
.


Как я понял, он и должен этим заниматься, и я поставил тройку после номера порта, но это ничего не дало. Скорее всего это я что-то делаю не так.
2. Не пойму как оперировать этими клиентами. Т.е. как сделать так, чтобы он первые 2 числа отправлял 1-му клиенту, вторые - 2-му, третьи - 3-му и чтобы я мог вывести на экран номер подключенного клиента .

Server
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
import java.io.*;
import java.net.*;
 
class Server extends Thread
{
    Socket s;
 
 
    public static void main(String args[])
    {
        try
        {
            int i = 0; // счётчик подключений
 
            // привинтить сокет на локалхост, порт 6665
            ServerSocket server = new ServerSocket(6665, 3);
 
            System.out.println("server is started");
 
            // слушаем порт
            while(i<4)
            {
                // ждём нового подключения, после чего запускаем обработку клиента
                // в новый вычислительный поток и увеличиваем счётчик на единичку
                new Server(server.accept());
                i++;
            }
        }
        catch(Exception e)
        {System.out.println("init error: "+e);
        } // вывод исключений
    
    }
 
    public Server(Socket s)
    {
        // копируем данные
        this.s = s;
 
        // и запускаем новый вычислительный поток (см. ф-ю run())
        setDaemon(true);
        setPriority(NORM_PRIORITY);
        start();
    }
 
    public void run()
    {
        try
        {          
            InputStream sin = s.getInputStream();
            OutputStream sout = s.getOutputStream();
            
            DataInputStream in = new DataInputStream(sin);
            DataOutputStream out = new DataOutputStream(sout);
            
            BufferedReader keyboard = new BufferedReader(new InputStreamReader(System.in));
           
            String line = "12 2 12 4 5 6";
               
                System.out.println("\nSending to "  + " client!");
 
                String str[] = line.split("[ ]");
                                
                out.writeUTF(String.valueOf(Integer.valueOf(str[0])+" "+ Integer.valueOf(str[1])));
                
                System.out.println(String.valueOf(Integer.valueOf(str[0])+" "+ Integer.valueOf(str[1])));
                in.readUTF();
                System.out.println("Client got a pocket!");
  
        }catch(Exception e)
        {System.out.println("init error: "+e);} // вывод исключений
    }
}
Client
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
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
 
public class Client extends Thread {
 
    public static void main(String[] args) throws Exception {
        try {
            Socket socket = new Socket("localhost", 6665);
            
            InputStream sin = socket.getInputStream();
            OutputStream sout = socket.getOutputStream();  
            
            DataInputStream in = new DataInputStream(sin);
            DataOutputStream out = new DataOutputStream(sout);
            String line,c = null;
            
            line = in.readUTF();
            String str[] = line.split("[ ]");
            
            System.out.println("I got a pocket!");
            if (Integer.valueOf(str[0]) > Integer.valueOf(str[1])) {
                
                c = str[0];
                str[0] = str[1];
                str[1] = c;
                
            }
                        
             out.writeUTF("I got it!");           
             System.out.println("line: "+ str[0] +" " + str[1]);
                                     
        } catch(Exception e)
        {System.out.println("init error: "+e);}
    }  
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.05.2014, 14:57
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
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 - 2025, CyberForum.ru