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

Как написать приложение клиент - сервер на Java

29.12.2013, 16:04. Показов 4364. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Вообщем вопрос такой. В нашем универе есть сеть. Как мне написать приложение клиент-сервер на Java, чтобы я допустим запустил сервер на одной машине, а с другой машины запустил клиент и послал сообщение на этот сервер по сети, и это сообщение там отобразилось (Извиняюсь за столь корявый язык, просто по другому объяснить не могу). Вы меня на путь истинный направьте) Что мне надо почитать и как это правильно организовать) Опыт у меня есть, но я не сталкивался с клиент-серверной архитектурой) Спасибо большое!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.12.2013, 16:04
Ответы с готовыми решениями:

Как написать приложение клиент-сервер?
как написать приложение типа клиент-сервер на Java, поставил Java(TM) Web Services Developer Pack...

Jabber сервер-клиент, приложение на Java
нужно написать серверное и клиентское приложения Jabber, клиент должен выполнять передачу...

Сервер - Java-приложение, Клиент - Android
Столкнулся с проблемой, нужно сделать клиент-серверное приложение, только в качестве клиента...

Java Клиент-Сервер приложение используя Socket API
Доброго времени суток. На лабораторной работе задали следующее задание. Создать клиент-серверное...

6
Java, C# - Expert
69 / 69 / 12
Регистрация: 09.08.2011
Сообщений: 284
30.12.2013, 08:11 2
Качаешь две библиотеки netty-4.0.0.CR3, javassist-3.12.1.GA ( данные версии просто у меня стоят ).
Дальше вставляешь:
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
39
40
41
42
43
44
45
46
47
package ru.nwleague.network;
 
import io.netty.bootstrap.Bootstrap;
import io.netty.channel.Channel;
import io.netty.channel.EventLoopGroup;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.nio.NioSocketChannel;
 
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
 
/**
 * Location: network
 * Created: IceSqueez
 * Date: 22.12.2013
 * Time: 23:25
 */
 
public class Client implements Runnable {
    private final String host;
    private final int port;
 
    public Client(String host, int port) {
        this.host = host;
        this.port = port;
    }
 
    @Override
    public void run() {
        EventLoopGroup eventLoopGroup = new NioEventLoopGroup();
        try {
            Bootstrap bootstrap = new Bootstrap()
                    .group(eventLoopGroup)
                    .channel(NioSocketChannel.class)
                    .handler(new ClientInitializer());
            Channel channel = bootstrap.connect(host, port).sync().channel();
            BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
            while(true) {
                channel.write(reader.readLine() + "\r\n");
            }
        } catch (InterruptedException | IOException ignored) {
        } finally {
            eventLoopGroup.shutdownGracefully();
        }
    }
}


ClientHandler

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package ru.nwleague.network;
 
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelInboundMessageHandlerAdapter;
 
/**
 * Location: network
 * Created: IceSqueez
 * Date: 22.12.2013
 * Time: 23:26
 */
 
public class ClientHandler extends ChannelInboundMessageHandlerAdapter<String> {
 
    @Override
    public void messageReceived(ChannelHandlerContext channelHandlerContext, String message) throws Exception {
        System.out.println(message);
    }
}


ClientInitializer

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
package ru.nwleague.network;
 
import io.netty.channel.ChannelInitializer;
import io.netty.channel.ChannelPipeline;
import io.netty.channel.socket.SocketChannel;
import io.netty.handler.codec.DelimiterBasedFrameDecoder;
import io.netty.handler.codec.Delimiters;
import io.netty.handler.codec.string.StringDecoder;
import io.netty.handler.codec.string.StringEncoder;
 
/**
 * Location: network
 * Created: IceSqueez
 * Date: 22.12.2013
 * Time: 23:25
 */
 
public class ClientInitializer extends ChannelInitializer<SocketChannel> {
    @Override
    protected void initChannel(SocketChannel channel) throws Exception {
        ChannelPipeline pipeline = channel.pipeline();
        pipeline.addLast("framer", new DelimiterBasedFrameDecoder(2556, Delimiters.lineDelimiter()));
        pipeline.addLast("decoder", new StringDecoder());
        pipeline.addLast("encoder", new StringEncoder());
        pipeline.addLast("handler", new ClientHandler());
    }
}


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
package ru.nwleague.service;
 
import io.netty.bootstrap.ServerBootstrap;
import io.netty.channel.EventLoopGroup;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.nio.NioServerSocketChannel;
 
/**
 * Location: service
 * Created: IceSqueez
 * Date: 24.12.2013
 * Time: 15:40
 */
 
public class Service implements Runnable {
    private final int port;
 
    public Service(int port) {
        this.port = port;
    }
 
    @Override
    public void run() {
        EventLoopGroup eventWork = new NioEventLoopGroup();
        EventLoopGroup eventBoss = new NioEventLoopGroup();
        try {
            ServerBootstrap bootstrap = new ServerBootstrap()
                    .group(eventBoss, eventWork)
                    .channel(NioServerSocketChannel.class)
                    .childHandler(new ServiceInitializer(this.port));
            bootstrap.bind(this.port).sync().channel().closeFuture().sync();
        } catch (InterruptedException ignored) {
        } finally {
            eventBoss.shutdownGracefully();
            eventWork.shutdownGracefully();
        }
    }
}


SeriverInitializer
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
package ru.nwleague.service;
 
import io.netty.channel.ChannelInitializer;
import io.netty.channel.ChannelPipeline;
import io.netty.channel.socket.SocketChannel;
import io.netty.handler.codec.DelimiterBasedFrameDecoder;
import io.netty.handler.codec.Delimiters;
import io.netty.handler.codec.string.StringDecoder;
import io.netty.handler.codec.string.StringEncoder;
 
/**
 * Location: service
 * Created: IceSqueez
 * Date: 24.12.2013
 * Time: 15:44
 */
 
public class ServiceInitializer extends ChannelInitializer<SocketChannel> {
    private final int port;
 
    public ServiceInitializer(int port) {
        this.port = port;
    }
 
    @Override
    protected void initChannel(SocketChannel channel) throws Exception {
        ChannelPipeline pipeline = channel.pipeline();
        pipeline.addLast("framer", new DelimiterBasedFrameDecoder(this.port, Delimiters.lineDelimiter()));
        pipeline.addLast("decoder", new StringDecoder());
        pipeline.addLast("encoder", new StringEncoder());
        pipeline.addLast("handler", new ServiceHandler());
    }
}


ServerHandler

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
package ru.nwleague.service;
 
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelInboundMessageHandlerAdapter;
import ru.nwleague.Boot;
import ru.nwleague.data.Client;
import ru.nwleague.data.Commands;
import ru.nwleague.struct.MessageEnum;
 
/**
 * Location: service
 * Created: IceSqueez
 * Date: 24.12.2013
 * Time: 15:45
 */
 
public class ServiceHandler extends ChannelInboundMessageHandlerAdapter<String> {
private ChannelGroup channel = new DefaultChannelGroup();
 
    @Override
    public void handlerAdded(ChannelHandlerContext ctx) throws Exception {
        channel.add(ctx.channel()); // Клиент пришел
    }
 
    @Override
    public void handlerRemoved(ChannelHandlerContext ctx) throws Exception {
        channel.remove(ctx.channel());//Клиент ушел
    }
 
    @Override
    public void messageReceived(final ChannelHandlerContext channelHandlerContext, String message) throws Exception {
        System.out.pringln(message);
    }
}


Добавлено через 27 секунд
А дальше уже редактируй под себя
2
0 / 0 / 0
Регистрация: 04.12.2013
Сообщений: 8
30.12.2013, 09:03  [ТС] 3
как все сложно. Ну ничего, разберемся Спасибо)
0
2000 / 1427 / 92
Регистрация: 25.11.2010
Сообщений: 3,611
30.12.2013, 11:20 4
Не, можно еще и Буран с Байконура пригнать, если хочется посложнее сделать. А можно на обычных сокетах. http://docs.oracle.com/javase/... index.html
1
0 / 0 / 0
Регистрация: 04.12.2013
Сообщений: 8
30.12.2013, 12:42  [ТС] 5
Мне просто понять суть для начала) А потом уже велосипеды делать))) Спасибо за информацию)))
0
Java, C# - Expert
69 / 69 / 12
Регистрация: 09.08.2011
Сообщений: 284
30.12.2013, 15:11 6
Цитата Сообщение от Skipy Посмотреть сообщение
Не, можно еще и Буран с Байконура пригнать, если хочется посложнее сделать. А можно на обычных сокетах. http://docs.oracle.com/javase/... index.html

Не по теме:

Не когда бы не сказал что netty, сложнее стандартных сокетов.....

0
2000 / 1427 / 92
Регистрация: 25.11.2010
Сообщений: 3,611
30.12.2013, 16:04 7
Цитата Сообщение от IceSqueez Посмотреть сообщение

Не по теме:

Не когда бы не сказал что netty, сложнее стандартных сокетов.....

Для использовани netty нужно понимать NIO, причем хорошо. А асинхронный неблокирующий ввод-вывод, как показывае практика, часто ставит в тупик. Существенно проще написать то же самое на блокирующихся сокетах в модели "поток на соединение".
1
30.12.2013, 16:04
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.12.2013, 16:04
Помогаю со студенческими работами здесь

Написать клиент-серверное приложение, где клиент должен отсылать запрос на сервер, а тот должен опрашивать БД
Здравствуйте, имею задачу, но не знаю как реализовать. Задача состоит в том чтобы написать клиент...

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

Клиент-серверное приложение: как определить, что сервер/клиент не отвечает в течении определенного времени
Пишу клиент-серверное приложение. Использую TCPListener и TCPClient. Вопрос: как определить что...

Клиент-серверное приложение. Сервер - ПК, клиент - телефон (Android)
Здравствуйте, решил для обучения написать программу для выключения ПК с телефона, используя...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru