Java Socket программирование - PullRequest
       36

Java Socket программирование

1 голос
/ 21 декабря 2011

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

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

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

Я искал некоторые материалы по этому поводу, но я не нашел ничего полезного.

Ответы [ 4 ]

4 голосов
/ 21 декабря 2011

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

Вот как ты это делаешь

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

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

На 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 и другие серверы приложений уже делают это. Если это будет веб-приложение, вам также следует подумать о правильно подписанном цифровом сертификате. Если в его интрасети браузеры использовали для доступа к нему, пришлось бы импортировать самогенерируемый самоподписанный сертификат.

2 голосов
/ 21 декабря 2011

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

И посмотрите этот урок

0 голосов
/ 05 мая 2017

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

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

0 голосов
/ 14 мая 2015
  1. Программа, которая создает порт, является серверной программой.

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

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

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

...