Technology [Programmazione Java] Socket

abhorash III

Typing Monkey
non riesco a fare una recive con i socket java

public class SimplySocket
{
TextArea testo_cmd;
TextArea testo_ris;
Socket mySocket=null;
DataOutputStream os=null;
DataInputStream is=null;
boolean x;

public SimplySocket(String DNS, String PORT, TextArea COMANDO, TextArea RISPOSTA)
{
this.testo_cmd=COMANDO;
this.testo_ris=RISPOSTA;
try
{
mySocket = new Socket(DNS, Integer.parseInt(PORT));
os = new DataOutputStream(mySocket.getOutputStream());
is = new DataInputStream(mySocket.getInputStream());
testo_ris.appendText("***Connessione Stabilita" + "\n");
}
catch (Exception e)
{
testo_ris.appendText("***Errore" + "\n");
}
}

public void send()
{
try
{
os.writeChars(testo_cmd.getText());
testo_ris.appendText("***Comando Inviato" + "\n");
}
catch (Exception e)
{
testo_ris.appendText("***Errore" + "\n");
}
}
///////////////////////////////////////////////////////////

public void receive()
{
//testo_ris.appendText(getPort());
String inputLine;
try
{
inputLine = is.readLine();
testo_ris.appendText(inputLine + "\n");
}
catch (IOException e)
{
testo_ris.appendText("IO Exception" + "\n");
}
}


praticamente.
mi connetto al sito della mia università, si connette xke ho fatto 300 test
con la send invio GET / HTTP/1.0
premo per ricevere...e si blocca...non riesco a capire il perche....
 

Massi™

Typing Monkey
os.writeChars(testo_cmd.getText());

Prova a modificare questa in

os.writeChars(testo_cmd.getText() + "\r\n");


Quando si mandano socket raw bisogna simulare il più possibile una sessione di Telnet, e quello che Telnet manda è
"GET / HTTP/1.0\r\n", perché prende in input anche la pressione del tasto "Invio" (\r è l'escape equivalente a "Return").

Te lo dico per esperienza perché quando mi facevo gli scriptini in Perl per leggermi i vari siti c'ho sbattuto la testa più volte su questo "problema".
Se anche così non funziona ci do un'occhiata più approfondinta :p

(Ti ho modificato il titolo, usiamole le tag altrimenti Thewo s'incazza :look: )
 

abhorash III

Typing Monkey
grazie mille :D ancora ho qualche problema xo :P
allora, mi connetto a
www.uniroma1.it  porta 80
con una send mando GET / HTTP/1.0 + modifica
premo per ricevere
e mi da IO EXcepetion.
è gia un passo avanti lol

Connessione in corso....
***Connessione Stabilita
Eseguo il comando
***Comando Inviato
Attendo Risposta
IO EXception
 

abhorash III

Typing Monkey
allora, ora sembra che alcuni siti rispondono, ma mi stampa solo una riga, e non tutto il codiceConnessione in corso....

***Connessione Stabilita
Eseguo il comando
***Comando Inviato
Attendo Risposta
<br />
Attendo Risposta
<b>Warning</b>: strpos() [<a href='function.strpos'>function.strpos</a>]: Empty delimiter in <b>/home/cinetivu/public_html/wp-content/plugins/wp-polls/wp-polls.php</b> on line <b>1289</b><br />
Attendo Risposta
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
Attendo Risposta
<html xmlns="http://www.w3.org/1999/xhtml">
Attendo Risposta
<head>
Attendo Risposta
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
Attendo Risposta
<meta http-equiv="imagetoolbar" content="no" />
Attendo Risposta

cioè, devo premere tante volte su Ricevere, invece come risposta non dovrei avere direttamente tutto?
 

Massi™

Typing Monkey
try
{
inputLine = is.readLine();
testo_ris.appendText(inputLine + "\n");
}
catch (IOException e)
{
testo_ris.appendText("IO Exception" + "\n");
}


L'errore quindi sta sicuramente qui.
Prova a vedere se ci sono funzioni differenti dalla readLine(), magari sbagli solo questo.
Comunque per debug, modifica questa
testo_ris.appendText("IO Exception" + "\n");
in
testo_ris.appendText("IO Exception: " + e + "\n");
 
A

Anonymous

Guest
Dlin dlon, si ricorda ai signori viaggiatori che il metodo .readLine() è deprecato da un po' :fag11:
 

abhorash III

Typing Monkey
vero Iaga, mi sono letto un po la documentazione java e dice che il metodo è deprecated, cosi mi consigli di usare?
 
A

Anonymous

Guest
Deprecated. This method does not properly convert bytes to characters. As of JDK 1.1, the preferred way to read lines of text is via the BufferedReader.readLine() method. Programs that use the DataInputStream class to read lines can be converted to use the BufferedReader class by replacing code of the form:

DataInputStream d = new DataInputStream(in);


with:

BufferedReader d
= new BufferedReader(new InputStreamReader(in));
 
Alto