PDA

View Full Version : [JAVA]Come fare un semplice socket per un client telnet


borexino
23-03-2011, 09:57
Ciao a tutti!
di java ne so davvero poco :doh: ! Ho questo problema.
devo fare un semplicissimo script in java che apra un semplicissimo socket verso un server mio.server.it sulla porta xxxxx e che una volta collegato si autentichi inviando una stringa così composta:

"user IZ6SZA pass 11111 vers testsoftware"

riceva l'output del server ed invii poi una cosa simile:

"IZ6SZA-11>APRS:!4321.52N/01217.80E#Test-JAVA_CLIENT"

Sono riuscito a copiazzare qualcosa ma senza risultati decenti.


import java.net.*;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;

public class Client{
Socket socket;
DataOutputStream out;
DataInputStream in;

Client(String address, int port){
try {
socket = new Socket("mio.server.it", xxxx);
System.err.println("Connesso a "+address+" alla porta "+port);
in = new DataInputStream(socket.getInputStream());
out = new DataOutputStream(socket.getOutputStream());
out.flush();

} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
System.err.println("Connessione rifiutata");
}}


String receive(){
String msg="";
try {
msg=(String)in.readLine();
} catch (IOException e) {
e.printStackTrace();
}return msg;
}

void send(String msg)
{
try{
out.write(2);
out.flush();
}
catch(IOException ioException){
ioException.printStackTrace();
}}

void close(){
try {
in.close();
out.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();}}




public static void main(String args[]) throws InterruptedException
{
Client client = new Client("mio.server.it", xxxx);
Thread.sleep(2000);
client.send("user IZ6... pass 1111 vers testsoftware");
Thread.sleep(1000);
client.send("IZ6...-11>APRS:!4321.52N/01217.80E#Test-JAVA_CLIENT");
Thread.sleep(5000);
client.close();
}
}

PGI-Bis
23-03-2011, 14:04
Il codice è ok. Forse per quello che devi fare tu basta un che di più minimale:

package sockets;

import java.io.PrintStream;
import java.net.Socket;
import java.util.Scanner;

public class Main {

public static void main(String[] args) throws Throwable {
Socket socket = null;
try {//questo serve perchè se dopo aver aperto il socket qualcosa va a
//schifìo bisogna comunque chiudere la connessione

socket = new Socket("mio.server.it", 1234);

PrintStream out = new PrintStream(socket.getOutputStream());//out scrive
Scanner in = new Scanner(socket.getInputStream());//in legge

out.print("user IZ6SZA pass 11111 vers testsoftware");
out.flush();

String risposta = in.nextLine();

} finally {//qui ci entriamo anche se prima è passato godzilla
if(socket != null) socket.close();
}
}
}

Poi bisogna vedere chi è che riceve. Ad esempio alcuni protocolli richiedono che le stringhe sia terminate da interruzioni di linea, a volte doppie. A quel punto non basta dire:

out.print("pippo")

ma bisogna dire:

out.print("pippo\r\n");//interruzione singola

oppure

out.print("pippo\r\n\r\n");//interruzione doppia.

Dipende dal protocollo del servizio a cui vuoi accedere.