Avatar billede drean Nybegynder
03. april 2009 - 14:26 Der er 9 kommentarer og
1 løsning

Java Socket specielle test

Hej,

Jeg sidder og leger med at lave en simpel server i Java, som printer den tekst jeg skriver ind. Jeg har lidt problemer med specielle tegn f.eks:

Input:
Test
æ ø å
@ £ $
<>\/()[]}


Output i programmet bliver så:
Test
� � �
@ � $
<>\/()[]}

Hvad gør jeg galt?


import java.net.*;
import java.io.*;

class srvr
{
    ServerSocket server;
    Socket client;
    BufferedReader in;
    PrintStream out;
   
    public void runserver()
    {
      try{
       
        server = new ServerSocket(29);
        client = server.accept();
        String line;
        in = new BufferedReader(new InputStreamReader(client.getInputStream()));
        OutputStream os = client.getOutputStream();
        out = new PrintStream(os);
        try {
          while ( !client.isClosed() && (line = in.readLine()) != null) {
            try {
              System.out.println(line);
            } catch (Exception ex) {
              System.out.println(ex.toString());
            }
          }
        }
        catch (Exception ex){
          System.out.println("ERROR:" + ex.toString());
        }
      }
      catch (IOException ioe) {
        System.out.println(ioe.toString());
      }
     
    }
 
    public static void main(String args[])
    {
     
    } 
}

public class sockettest {
    public static void main(String args[])
    {
      srvr m = new srvr();
      m.runserver();
    }


}
Avatar billede drean Nybegynder
03. april 2009 - 14:37 #1
Emnet skulle selvfølgelig have været speciel text :)
Avatar billede arne_v Ekspert
03. april 2009 - 14:55 #2
Hvis du koerer paa windows saa bruger Windows kommando prompt jo stadig et gammelt DOS tegnsaet - det giver altid problemer.

Hvis det bare er til debug, saa verificer at tegnene er OK ved at skrive til en fil og checke den med et Windows program f.eks. Notepad og saa ignorer problemet.

Skal du rent faktisk bruge det i console output, saa skal vi igang med at lave en egentligt troubleshooting og finde en loesning.
Avatar billede drean Nybegynder
03. april 2009 - 15:00 #3
Pt kører det på en linux boks.

Kan godt se jeg er nødt til at fortælle lidt mere om projektet. Det jeg prøver på er at lave en SMTP proxy, hvor jeg fanger input stream, behandler den og sender den videre igen til en SMTP service.

Pt er det sådan at smider jeg ÆØÅ efter den i ovenstående, samler det hele i en StringBuffer, og herefter sender denne buffer videre til en SMTP server.

StringBuffer m_buffer = new StringBuffer();
m_buffer.append(<data fra in.read(x)>);
m_buffer.toString(); sender jeg til den anden SMTP server <- det er vel nok her den rent faktisk går galt?
Avatar billede arne_v Ekspert
03. april 2009 - 19:44 #4
Har du proevet med:

in = new BufferedReader(new InputStreamReader(client.getInputStream(), "UTF-8"));

eller:

in = new BufferedReader(new InputStreamReader(client.getInputStream(), "ISO-8859-1"));
Avatar billede arne_v Ekspert
03. april 2009 - 19:45 #5
Ioevrigt sender man stort set aldrig email i 8 bit.

Quoted Printable encoding.
Avatar billede arne_v Ekspert
05. juli 2009 - 22:11 #6
drean ?
Avatar billede drean Nybegynder
24. juli 2009 - 13:58 #7
Sorry, kom helt væk fra det her projekt :)

Det ser ud til at virke med "in = new BufferedReader(new InputStreamReader(client.getInputStream(), "ISO-8859-1"));"

Men, det er vel ikke hvad jeg burde bruge, burde vel bare gemme det som det kommer ind? i et eller andet binært format.
Avatar billede arne_v Ekspert
26. juli 2009 - 04:16 #8
Du kunne godt læse den som simpel InputStream, but emails er altid text (binære attachments bliver konverteret med base64 til text).
Avatar billede drean Nybegynder
26. juli 2009 - 16:30 #9
Ja, det ved jeg. Ved også af erfaring at desværre så er det ikke alle programmer/klienter som korrekt encodeder teksten, også ender det med at der er "ugyldige" tegn i forhold til RFC'en, men programmet er nødt til at håndtere de mails også sende dem videre.

Smider du et svar?
Avatar billede arne_v Ekspert
26. juli 2009 - 16:41 #10
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester