Newsgroup: it.comp.java
Titolo: Help per socket nntp in java

Ciao a tutti
nelle mie intenzioni questa classe (v. sotto) dovrebbe connettersi con
il newsserver locale e inviargli il comando help. In realta` non
funziona: l'esecuzione della classe provoca questa reazione del ns:
	Client 127.0.0.1:119(xxx) connected
	Connection lost:127.0.0.1:119(xxx)
	Client 127.0.0.1:119(xxx) disconnected
mentre la stessa operazione con telnet (localhost:119) provoca:
	Client 127.0.0.1:119(xxx) connected
	> help
	< 100 Implemented command follow
Sembra evidente che il socket riesce a connettersi ma non a scrivere.
Qualcuno sa perche`?
[x-post, f/up]
import java.io.*;
import java.net.*;
public class MySocket {
   public static void main(String[] args) {
      Socket c;
      OutputStream out;		
      try {
         c = new Socket("localhost", 119);
         out = c.getOutputStream();
         byte[] msg = new String( "help\n" ).getBytes();
         out.write(msg);
         out.flush(); //inutile
         out.close();
         c.close();	
      } catch (Exception e) {}
   }
}
-- 
ciao, Marvin

    }
la butto li:
prova a sostituire il tuo
   OutputStream out = socket.getOutputStream()
con:
   PrintWriter out = new PrintWriter(
              new BufferedWriter(
                new OutputStreamWriter(
                  socket.getOutputStream() ) ), true );
(il parametro 'true' finale abilita il flushing automatico)
e poi scrivi sullo stream direttamente la stringa ASCII con:
  out.println( "help" );
-- 
Ciao, Matteo                         !!  It has to start somewhere
                                     /\  It has to start sometime
mailto:
matteo.mattia
 (at) 
libero.it
  \/  What better place than HERE
                                     　  What better time than NOW

   PrintWriter out = new PrintWriter(
Grazie mille! adesso funziona, e con una semplice stringa.
La cosa buffa e` che avevo escluso PrintWriter perche` sul sito della
Sun avevo trovato questa nota: 
	    /* Build a message string and pack it into a byte array.
	     * NOTE:  This conversion is a necessary evil since
	     * sockets uniformly use a low-level abstraction whereby
	     * all data is transported as a stream of bytes.
	     */
*uniformly*.  Bah!
-- 
ciao, Marvin

                   socket.getOutputStream() ) ), true );
Non sono un po' troppi tutti questi filtri sul flusso? Dovrebbe bastare
new PrintWriter(socket.getOutputStream())
Ciao,
 Stefano
----------
"X WindowSSS, teSSSoro mio... lo odieremo per SSSempre"
Bill Gollum
----------

new PrintWriter(socket.getOutputStream())
In effetti  
  PrintWriter out2 = new PrintWriter(socket.getOutputStream(),true) 
funziona altrettanto bene.
A proposito: 'out' e 'out2' sono diversi? Io direi di no.
-- 
ciao, Marvin

 
come si dice: meglio troppi che troppo pochi! :)
no ok: in effetti mi sa` che il Buffered e` un po` ridondante...
l'OutputStreamWriter per convertire da OutputStream a Writer
non so` se si puo` togliere: io l'ho sempre messo! Poi sai
com'e`: l'abitudine...


 
Penso di no! (ok, avevo esagerato... :)
il wrapper da OutputStream a Writer non e` in realta` necessario (al
costruttore di PrintWriter vanno bene tutti e due).
il BufferredWriter -credo- nemmeno xche` il PrintWriter dovrebbe gia`
mantenere un piccolo buffer interno (tant'e` che il secondo parametro
del costruttore serve proprio per abilitare il flushing automatico
ad ogni scrittura) ...su questa xo` -che sarebbe l'unica differenza-
non sono cosi` pronto a scommettere... (la documentazione di PrintWriter
sotto mano non ce l'ho!)
Insomma: non sono la stessa cosa xche` c'e` "un livello di buffer" di
differenza ...xo` alla fine fanno proprio lo stesso lavoro.
Sai com'e`: ho quelle 3 righe di codice dal mio primo programma che
usava l'I/O (....) e continuo a portarmele dietro con copia&incolla
piu` che altro per abitudine... (della serie: cosi` funziona... :)


Sun avevo trovato questa nota: 
Se non ricordo male, NNTP vuole \r\n, non solo \n. Probabilmente il tuo codice 
iniziale non funzionava per questo.
-- 
God is Real, unless declared Integer.
ObjectZone - 
http://space.tin.it/computer/csadun

Probabilmente il tuo codice iniziale non funzionava per questo.
No, con "help\n" il ns risponde <Unsupported NNTP-command "help#">.
Invece con il mio codice iniziale il ns non dava proprio segni di vita
(e in fondo cio` e` strano, perche` io *qualcosa* gli mandavo, seppur
nel formato sbagliato - array di byte invece che una stringa).
-- 
ciao, Marvin


Oh, nel tuo codice avevo letto 
    	byte[] msg = new String( "help\n" ).getBytes();
ecco il perche' del commento :). Il server NNTP attende il fine linea (\r\n) 
prima di interpretare un comando - quindi finche' non glielo mandi non fa 
nulla.
