2014-01-07 7 views
0

Я хочу, чтобы иметь возможность отправлять простые сообщения по сети. Любое сообщение.Как отправить сообщение по сети?

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

Я не знаю с чего начать. Каков самый простой способ отправить сообщение по сети?

+2

Добро пожаловать в StackOverflow http://stackoverflow.com/questions/how-to-ask – gtgaxiola

+1

Я проголосовал за этот вопрос, и вот почему: на самом деле это очень четкий и осторожный вопрос. Он просил очень простую вещь: «Как отправить сообщение по сети». Могут быть многочисленные способы сделать это, но это нормально, если ответ одним способом удовлетворяет эту проблему. –

+0

Сервер должен быть многопоточным, не обязательно должен быть, но может быть проще, и всегда должен слушать новые подключения. Когда он получает новое соединение, поместите его в новый поток, чтобы сделать свой бизнес, а затем прослушать другое соединение. Ищите учебники там, вы поймете это. Практикуясь и пробовав новые методы, вы найдете то, что работает, а что нет. Опция, указанная выше, является лишь одним из многих решений для вашего проекта. Удачи :) –

ответ

2

Начиная с учебником Reading from and Writing to a Socket, вы могли бы начать с простого echo server, который использует ServerSocket как и

public static void main(String[] args) throws Exception { 
    // create socket 
    int port = 4444; 
    ServerSocket serverSocket = new ServerSocket(port); 
    System.err.println("Started server on port " + port); 

    // repeatedly wait for connections, and process 
    while (true) { 
    // a "blocking" call which waits until a connection is requested 
    Socket clientSocket = serverSocket.accept(); 
    System.err.println("Accepted connection from client"); 

    // open up IO streams 
    BufferedReader in = new BufferedReader(new InputStreamReader(
      clientSocket.getInputStream())); 
    PrintWriter out = new PrintWriter(clientSocket.getOutputStream()); 
    // waits for data and reads it in until connection dies 
    // readLine() blocks until the server receives a new line from 
    // client 
    String s; 
    try { 
     while ((s = in.readLine()) != null) { 
      out.println(s); 
      out.flush(); 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

    // close IO streams, then socket 
    System.err.println("Closing connection with client"); 
    out.close(); 
    in.close(); 
    clientSocket.close(); 
} 

Затем вы можете использовать «телнет Localhost 4444», чтобы проверить его, или написать целую клиента; возможно, как клиент в учебнике выше.

+0

теперь как я делаю клиентом для этого? XD – user3170707

+0

@ user3170707 [Здесь] (http://docs.oracle.com/javase/tutorial/networking/sockets/examples/EchoClient.java). –

2

Хорошо, этот вопрос действительно открыт. Сначала есть несколько вопросов, на которые нужно ответить: хотите ли вы реализовать свой собственный сервер или использовать существующую технологию. Очевидно, что JMS-API станет отправной точкой в ​​последнем случае. Существует множество поставщиков реализации, эталонная реализация в самой Glassfish, HornetQ как автономная, так и как часть JBoss - Instance, только для обозначения двух. Отправка сообщений с помощью JMS довольно проста при понимании некоторых базовых понятий, и они могут содержать как текстовые, так и двоичные данные. Другим способом использования существующего решения является внедрение WebService, к которому может подключиться ваш клиент, который будет JAX-RS для веб-сервисов на основе REST, например. Этот подход также более независим от платформы, поскольку на этом письме я не знаю библиотеки для клиентов Android, поддерживающих JMS, и большинство других языков программирования полностью поддерживают службы на основе REST. Если вы не хотите использовать какой-либо существующий протоколл, вы должны придерживаться собственной реализации сервера и клиента. Таким образом, это будет упомянутое сокет-программирование. Ну, эта задача не будет легкой: вы не будете, чтобы ваш сервер обрабатывал несколько клиентов одновременно, а не блокировал один запрос до тех пор, пока другой не будет завершен, предоставит некоторый механизм авторизации вашего клиента для доступа приложения к серверу , Вы будете иметь ресурсы, которые распределяются между вашими клиентами на сервере при одновременном обращении с несколькими клиентами, поэтому доступ к этим ресурсам должен быть синхронизирован, эти темы относятся к параллельному программированию и представляют собой тихую интересную область собственных информационных технологий. Другими интересными аспектами дизайна вашего приложения могут быть решения с использованием поддержки JNDI для привязки ресурсов или реализации CDI-контейнера, чтобы клиенты могли легко адаптировать ваш формат обмена сообщениями. Это весело, но не в течение одного дня. ;)

Смежные вопросы