/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
//package p3_serverv1;
/**
*
* @author Edward
*/
import java.io.FileInputStream;
import java.io.OutputStream;
import java.net.*;
import java.security.KeyStore;
import java.security.SecureRandom;
import javax.net.ssl.KeyManagerFactory;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLServerSocket;
import javax.net.ssl.SSLServerSocketFactory;
import javax.net.ssl.SSLSocket;
public class server{
/**
* @param args the command line arguments
*/
public static void main(String[] args) throws Exception {
if (args.length != 1) {
System.err.println("Invocation: java Server <PORT>");
System.exit(-1);
}
System.setProperty("javax.net.ssl.keyStore", "server.store");
System.setProperty("javax.net.ssl.keyStorePassword", "server.secret");
System.setProperty("javax.net.ssl.trustStore", "server.trust");
KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509", "SunJSSE");
KeyStore ks = KeyStore.getInstance("JKS"); //provider=SUN
ks.load(new FileInputStream("server.store"),"server.secret".toCharArray());
kmf.init(ks, "server.secret".toCharArray());
SSLContext context = SSLContext.getInstance("TLSv1", "SunJSSE");
context.init(kmf.getKeyManagers(), null, new SecureRandom());
/* Utworzenie gniazda nasluchujacego: */
SSLServerSocketFactory sf = context.getServerSocketFactory();
SSLServerSocket listeningSocket = (SSLServerSocket)sf.createServerSocket();
//SSLServerSocket listeningSocket = (SSLServerSocket) SSLServerSocketFactory.getDefault();
/* Utworzenie obiektu InetSocketAddress na podstawie numeru portu: */
InetSocketAddress sa = new InetSocketAddress(Integer.parseInt(args[0]));
/*
* Powiazanie gniazda serwera z numerem portu i adresem IP wildcard.
* Serwer bedzie nasluchiwal na wszystkich interfejsach:
*/
listeningSocket.bind(sa);
System.out.println("Server is listening for incoming connections...");
/* Wiadomosc do wyslania: */
String message = "Laboratorium PUS.";
while (true) {
/*
* Akceptacja ustanowionego polaczenia TCP i utworzenie dla nowego
* polaczenia gniazda Socket:
*/
SSLSocket connectedSocket = (SSLSocket) listeningSocket.accept();
/* Pobranie adresu klienta: */
InetSocketAddress rsa = (InetSocketAddress)connectedSocket.getRemoteSocketAddress();
System.out.println("Connection accepted from " + rsa.getAddress().getHostAddress() + ":" + connectedSocket.getPort());
/* Pobranie strumienia wychodzacego (do zapisu): */
OutputStream os = connectedSocket.getOutputStream();
/* Wyslanie wiadomosci: */
os.write(message.getBytes("UTF-8"));
/*
* Zamkniecie gniazda polaczonego. Serwer bedzie nasluchiwal dalej
* na nowe polaczenia.
*/
connectedSocket.close();
/*
* Zamkniecie gniazda powoduje zamkniecie skojarzonych z nim
* strumieni.
*/
}
}
}