ΡΠΈΠ²Π΅ΡΡΡΠ²ΡΡ.
Hodie inspicere velim applicationes scriptionis clientis-servientis qui functiones Fenestrae vexillum exercent utilitates, ut Telnet, TFTP, et cetera, et cetera in puro Java. Patet me nihil novi - omnes hae utilitates plus uno anno feliciter laborasse, sed non credo omnes scire quid sub cucullo agatur.
Hoc ipsum est quod sub inciso agetur.
In hoc articulo, ne extrahatur, praeter generales informationes, de Telnet servo tantum scribam, sed in momento etiam materia in aliis utilitatibus est - in ulterioribus partibus seriei erit.
Primum indicare debes quid sit Telnet, quid opus sit, et quid adhibeatur. Fontes ad verbum non utar (si opus sit, nexum materiarum in argumento in fine articuli apponam), tantum dicam Telnet remotum accessum ad lineam artificii praecipere. Per et amplum, hoc est ubi fines eius officiati sunt (deliberate tacui de accessu ad portum, magis in illo postea). Hoc significat ut ad effectum deducendi, lineam in cliente accipere oportet, servo transmittere, conare ad lineam imperium transire, mandatum linea responsionis legere, si adsit, eam ad clientem transmittere et. illud in velum vel, si errores ostendat, cognoscat usor aliquid esse falsum.
Ad praedictam efficiendam, opus est 2 classes operariis et quibusdam probationibus classis e quibus servitorem deducemus et per quod client laborabit.
Quocirca in momento applicationis structuram includit;
- TelnetClient
- TelnetClientTester
- TelnetServer
- TelnetServerTester
Eamus per singula;
TelnetClient
Omnia haec classis mandata recepta mittendi facere ac responsa recepta monstrat. Praeterea opus arbitrarium (ut supra dictum est) portum remotum artificii coniungere et ab eo disiungere posse.
Ad hoc consequendum munera sequentia sunt adimpleta;
Munus quod nervum electronicum pro argumento sumit, nexum aperit et rivulos initus et output incipit (variabilis amnis supra declaratus est, fontes pleni in fine articuli sunt).
public void run(String ip, int port)
{
try {
Socket socket = new Socket(ip, port);
InputStream sin = socket.getInputStream();
OutputStream sout = socket.getOutputStream();
Scanner keyboard = new Scanner(System.in);
reader = new Thread(()->read(keyboard, sout));
writer = new Thread(()->write(sin));
reader.start();
writer.start();
}
catch (Exception e) {
System.out.println(e.getMessage());
}
}
Idem munus obruunt, connectens cum defalta portu - hoc enim telnet 23
public void run(String ip)
{
run(ip, 23);
}
Munus legit characteres e tincidunt et eos mittit ad nervum output - quod est typicum, in linea modus, non modus characteris:
private void read(Scanner keyboard, OutputStream sout)
{
try {
String input = new String();
while (true) {
input = keyboard.nextLine();
for (char i : (input + " n").toCharArray())
sout.write(i);
}
}
catch (Exception e) {
System.out.println(e.getMessage());
}
}
Munus data e nervum accipit et in scrinio ostendit
private void write(InputStream sin)
{
try {
int tmp;
while (true){
tmp = sin.read();
System.out.print((char)tmp);
}
}
catch (Exception e) {
System.out.println(e.getMessage());
}
}
Munus sistit notitia receptionis et transmissionis
public void stop()
{
reader.stop();
writer.stop();
}
}
TelnetServer
Hoc genus debet habere functionem recipiendi mandatum ab neruo, illud ad executionem mittens, responsionem ex mandato remissas ad nervum mittens. Propositum deliberate data inputatio non retentat, quia primo, etiam in "telnet telnet" formare potest orbis servientis, secundo, eventus securitatis in hoc articulo omittitur in principio, et ideo non est. verbum de encryption vel SSL.
Munera tantum 2 sunt (una cumulatur), et in genere hoc non valde utilem usum, sed ad huius operis proposita, opportunum mihi visum est omnia relinquere, ut dictum est.
boolean isRunning = true;
public void run(int port) {
(new Thread(()->{ try {
ServerSocket ss = new ServerSocket(port); // ΡΠΎΠ·Π΄Π°Π΅ΠΌ ΡΠΎΠΊΠ΅Ρ ΡΠ΅ΡΠ²Π΅ΡΠ° ΠΈ ΠΏΡΠΈΠ²ΡΠ·ΡΠ²Π°Π΅ΠΌ Π΅Π³ΠΎ ΠΊ Π²ΡΡΠ΅ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠΌΡ ΠΏΠΎΡΡΡ
System.out.println("Port "+port+" is waiting for connections");
Socket socket = ss.accept();
System.out.println("Connected");
System.out.println();
// ΠΠ΅ΡΠ΅ΠΌ Π²Ρ
ΠΎΠ΄Π½ΠΎΠΉ ΠΈ Π²ΡΡ
ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠΎΡΠΎΠΊΠΈ ΡΠΎΠΊΠ΅ΡΠ°, ΡΠ΅ΠΏΠ΅ΡΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ»ΡΡΠ°ΡΡ ΠΈ ΠΎΡΡΡΠ»Π°ΡΡ Π΄Π°Π½Π½ΡΠ΅ ΠΊΠ»ΠΈΠ΅Π½ΡΡ.
InputStream sin = socket.getInputStream();
OutputStream sout = socket.getOutputStream();
Map<String, String> env = System.getenv();
String wayToTemp = env.get("TEMP") + "tmp.txt";
for (int i :("Connectednnr".toCharArray()))
sout.write(i);
sout.flush();
String buffer = new String();
while (isRunning) {
int intReader = 0;
while ((char) intReader != 'n') {
intReader = sin.read();
buffer += (char) intReader;
}
final String inputToSubThread = "cmd /c " + buffer.substring(0, buffer.length()-2) + " 2>&1";
new Thread(()-> {
try {
Process p = Runtime.getRuntime().exec(inputToSubThread);
InputStream out = p.getInputStream();
Scanner fromProcess = new Scanner(out);
try {
while (fromProcess.hasNextLine()) {
String temp = fromProcess.nextLine();
System.out.println(temp);
for (char i : temp.toCharArray())
sout.write(i);
sout.write('n');
sout.write('r');
}
}
catch (Exception e) {
String output = "Something gets wrong... Err code: "+ e.getStackTrace();
System.out.println(output);
for (char i : output.toCharArray())
sout.write(i);
sout.write('n');
sout.write('r');
}
p.getErrorStream().close();
p.getOutputStream().close();
p.getInputStream().close();
sout.flush();
}
catch (Exception e) {
System.out.println("Error: " + e.getMessage());
}
}).start();
System.out.println(buffer);
buffer = "";
}
}
catch(Exception x) {
System.out.println(x.getMessage());
}})).start();
}
Propositum servo portum aperit, notitia ex eo legit donec mandatum finis characteris incidat, mandatum ad novum processum transit, et output a processu ad nervum reducit. Omnia tam simplicia sunt quam vasa impetum Kalashnikov.
Ideoque onerare huic functioni cum defalta est;
public void run()
{
run(23);
}
Bene igitur munus, quod servo sistit etiam leve, ansam aeternam interrumpit, condicionem suam violat.
public void stop()
{
System.out.println("Server was stopped");
this.isRunning = false;
}
Classes examinare hic non dabo, infra sunt - omnia quae faciunt methodos publicarum functionis inspicias. Omnia in git.
Summatim, in duobus vesperis intelligere potes principia operationis principale consolandi utilitates. Nunc, cum telenet ad computatorium remotum, intellegimus quid agatur - magica evanuit)
So, nexus;
Source: www.habr.com