2011-12-21 3 views
1

У меня есть два вопроса в программировании сокетов Java. это будет автономное приложение и будет построено только в J2SE.Программирование Java-сокетов

1) Можно ли читать/писать одновременно через тот же порт в моем случае, так как это будет запрос HTTPS так порт будет 443.

2) Можно ли создать два соединения сокета в одном Java заявление. из которых один сокет действует как клиент и другой как сервер.

Я искал некоторые материалы, касающиеся этого, но я не мог найти ничего полезного.

ответ

2

Чтобы ответить на любые ваши вопросы, да. Для второго вопроса вам потребуется создать поток, который будет прослушивать действия на сервере.

И посмотреть на this tutorial

+3

[Это PDF] (http://www.buyya.com/java/Chapter13.pdf) также является хорошим ресурсом, имо. (Просто добавлю немного больше вашего ответа) :-) – Deco

4

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

Вот как вы это делаете

Socket socket = new Socket("10.0.0.1", 1234); 
OutputStream os = socket.getOutputStream(); 
InputStream is socket.getInputStream(); 
new MyInputServiceThread(is).start(); 

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

На 2 вы можете иметь любое количество клиентов и серверных сокетов в одном приложении. По крайней мере, теоретически. Существуют практические ограничения. Для серверных сокетов вы можете принять соединение, а затем запустить поток, проходящий через открытый сокет, а затем ваш серверный сокет должен быть готов к принятию большего количества подключений. Другими словами, чтобы разрешить несколько подключений на одном и том же порту, вы должны убедиться, что вы не заблокируете его после приема соединения. Однако вы можете открыть несколько серверных сокетов, а также в нескольких потоках.

Вот пример

ServerSocket server = new ServerSocket(1234); 
while (true) { 
    Socket socket = server.accept(); 
    // Once it spawns the thread that socket connection is serviced by 
    //the thread and the   
    //server socket is ready to accept new connections. 
    new Mythread(socket).start(); 
    // above Mythread extends Thread....  
} 

Для приложения, как клиента нет предела. то есть столько, сколько вы хотите подключить.

На другой ноте ... Для https вам также необходимо принять сертификаты, что означает, что вам придется иметь дело с закрытыми открытыми ключами. Вы действительно хотите это сделать? поскольку tomcat и другие серверы приложений уже делают это. Если это будет веб-приложение, вам также нужно будет подумать о правильно подписанном цифровом сертификате. Если в своей интрасети, к которой тогда обратились браузеры, пришлось бы импортировать самоподписанный сертификат.

+0

Как я уже говорил ранее, это не веб-приложение. Это будет самостоятельное приложение. Приложение будет запущено с использованием основного метода. Мы не вовлечены в компонент. Поэтому я думаю, мне не нужно беспокоиться о сертификате. – AKV

+1

Даже если это не веб-сервер, если вы используете ssl, вам нужно будет беспокоиться о сертификатах. С вашего вопроса он говорит https ??? Что использует http over ssl. –

0
  1. Программа, создающая порт, является серверной программой.

  2. в серверной программе вы можете создавать несколько портов, которые прослушивают запрос клиента.

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

  4. Когда клиент отправляет запрос на сервер, сервер получает буферную память, где запрос является местом, а сервер читает его. Сервер также получает другую буферную память, где сервер может написать свой ответ, который необходим для отправки обратно клиенту. Итак, да, сервер может читать и писать одновременно.

0

Для тех, кто все еще ищет дополнительные разъяснения. Вот ссылка на некоторые примеры простых игр, выполненных с использованием Java Sockets. Я считаю полезным использовать некоторый код для анализа и игры.

http://cs.lmu.edu/~ray/notes/javanetexamples/