[java] msn wat gaat hier mis?

Pagina: 1
Acties:
  • 106 views sinds 30-01-2008
  • Reageer

  • Skinkie
  • Registratie: Juni 2001
  • Laatst online: 09-06-2020

Skinkie

Op naar de 500

Topicstarter
In mijn eeuwige zoektoch naar studiepunten (en om des avonds thuis wat te klieren te hebben) was ik weer met een leuk plannetje bezig... waar inmiddels de ene helf van werkt.

Nu probeer ik naar MSN te connecten:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
    private static void main(String[] args)
    {
    private DataInputStream in;
    private DataOutputStream out;
    private Socket socket;

      try
      {
        System.out.print("Trying to open port...");
        socket=new Socket("64.4.13.55", 1863);
        System.out.print("Succes\n");
//      out=socket.getOutputStream();
//      out.writeChars("VER 0 MSNP2 CVR0");
//      in=socket.getInputStream();
//      String temp=new String(in.readLine());
//      System.out.println(temp);

        out=new DataOutputStream(socket.getOutputStream());
//      out.flush;
        in=new DataInputStream(socket.getInputStream());

        out.writeChars("VER 0 MSNP2 CRV0");

        System.out.println(in.readLine());

        socket.close();
      }
      catch (IOException ex)
      {
        System.err.println(ex);
      }

met het bovenstaande probeer ik alleen ff te checken of ik uberhaupt wat terug krijg van die msn server. enige wat ik krijg:
code:
1
2
3
4
[root@skinkie projectje]# java MSN
Trying to open port...Succes
null
[root@skinkie projectje]#

ziet iemand in één oogopslag wat er mis gaat?

Steun Elkaar, Kopieer Nederlands Waar!


  • Tuinhark
  • Registratie: April 2000
  • Laatst online: 05-09 14:21

Tuinhark

Retro

Als je eens ging debuggen door her-en-der loze System.out.println() dumpjes te maken zodat je ook weet waar die fout gaat...

Wat ook kan is in de catch() een ex.printStackTrace() te mikken.

Niet echt 'één-oogopslag', maar it'll do. :7

:Y)

  • Skinkie
  • Registratie: Juni 2001
  • Laatst online: 09-06-2020

Skinkie

Op naar de 500

Topicstarter
Zoals je ziet heb ik een verbinding met de MSN server.

Ik verzend slechts 1 string. Dan zou ik dus wat terug moeten krijgen.

Ben er al een hele tijd mee bezig, maar volgens mij mis ik iets essiencienteels.

Steun Elkaar, Kopieer Nederlands Waar!


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
wasigh is eens druk met het MSN protocol bezig geweest (en heeft een kleine lib). Die zal het waarschijnlijk wel zien :) .

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • TheOneLLama
  • Registratie: Oktober 2000
  • Laatst online: 20-01-2022

TheOneLLama

A llama like no llama before

Op woensdag 30 januari 2002 22:43 schreef Skinkie het volgende:

ziet iemand in één oogopslag wat er mis gaat?
Ik weet niet.. maar misschien dat het toch iets met character encoding is? Misschien dat er een ander (open-source) project JAVA/MSN bestaat, waar je ff kan spieken.. anders pak je Trillian of iets dergelijks en maak je van trillian en jou progje wat tracedumps en vergelijk je ze..

Opera OpenOffice.org Jabber Psi jabber://llama@mordax.com


  • Skinkie
  • Registratie: Juni 2001
  • Laatst online: 09-06-2020

Skinkie

Op naar de 500

Topicstarter
Nu hopen dat ie ff vanavond nog reageerd. Ik wilde het eigenlijk compleet zelf doen... (dus niet iemand anders werk gebruiken). Het andere deel (telnet) werk al wel :)

Steun Elkaar, Kopieer Nederlands Waar!


Verwijderd

er moet toch nog een crlf achter??? graag gedaan :P

  • Skinkie
  • Registratie: Juni 2001
  • Laatst online: 09-06-2020

Skinkie

Op naar de 500

Topicstarter
YES!!!!!!!!!!!!!!!!!!!!!! :*

heel erg bedankt er moest nog 1 dingetje verandert worden :)
code:
1
2
3
4
        temp="VER 0 MSNP7 MSNP6 MSNP5 MSNP4 CVR0\n\r";

//      out.writeChars(temp);
        out.writeBytes("VER 0 MSNP7 MSNP6 MSNP5 MSNP4 CVR0\n\r");

I'm so happy!

Steun Elkaar, Kopieer Nederlands Waar!


Verwijderd

Na dit topic gelezen te hebben heb ik iig een response op het 'VER' commando, alleen als ik dan vervolgens 'INF 1' stuur krijg ik niks meer terug...m.a.w. een 'null' dus IPV 'INF 1 MD5'

Ik gebruik vrijwel dezelfde code (maar werk met functies) en voeg ook de '\n\r' toe aan het eind.

Iemand die hetzelfde probleem heeft gehad? Of die een oplossing weet?

Verwijderd

laat maar, heb het probleem al,
in.readLine() geeft een 'null' terug altijd als je het voor de 2e keer aanroept.. Ben op zoek naar oplossing daarvoor dus...

  • MisterData
  • Registratie: September 2001
  • Laatst online: 07-09 20:23
Op woensdag 30 januari 2002 22:55 schreef mbravenboer het volgende:
wasigh is eens druk met het MSN protocol bezig geweest (en heeft een kleine lib). Die zal het waarschijnlijk wel zien :) .
Die werkt ook niet helemaal ;) Maar dat had te maken met het chatgedeelte (heb ik trouwens gefixt) :)

En, even op het probleem ingaande, weet je zeker dat de server MSNP2 nog wel pikt? null betekent dat de socket wordt dichtgegooid en er moet dus een fout zitten in de zin "VER 0 MSNP2 CVRO". Probeer het es met een rijtje protocollen,zoals MSNP5 MSNP4 MSNP3 CVRO. Succes :)

  • MisterData
  • Registratie: September 2001
  • Laatst online: 07-09 20:23
Op maandag 22 april 2002 16:33 schreef Trebel het volgende:
laat maar, heb het probleem al,
in.readLine() geeft een 'null' terug altijd als je het voor de 2e keer aanroept.. Ben op zoek naar oplossing daarvoor dus...
Maak anders een tweede thread die in een while-loopje die berichten leest en doorstuurt naar deze class :)

Verwijderd

Op maandag 22 april 2002 16:53 schreef MisterData het volgende:
Probeer het es met een rijtje protocollen,zoals MSNP5 MSNP4 MSNP3 CVRO. Succes :)
Als ik de 'VER' en de 'INF' commando's niet stuur gaat alles goed, ik krijg redirect's en uiteindelijk een MD5 hash. 'VER' en 'INF' zijn (nog) niet verplicht en ga me erin verdiepen als de rest werkt. Het is vaag, maar het probleem is opgelost...

  • bazzs2001
  • Registratie: April 2002
  • Laatst online: 13-06 11:18

bazzs2001

je moet knagen wat lekker is

Ik ben een hele tijd geleden bezig geweest met een msn proggel en ik gebruikte een BufferedReader (aanmaken met

new BufferedReader(net InputStreamReader(socket.getInputStream()));

)
en een PrintWriter (aanmaken met

new PrintWriter (new OutputStreamWriter(socket.getOutputStream()));

)

Dan kan je de methoden readln() en println() gebruiken (voor conversaties is dit onhandig, maar verder is het zeer handig :)

Ik zal later de source wel ff posten,

Ik zal NDF 82 wel ff langfs sturen die is er nu mee bezig.

groeten


  • NDF82
  • Registratie: Januari 2002
  • Laatst online: 09-09 14:45

NDF82

Doomed Space Marine

Maak anders een tweede thread die in een while-loopje die berichten leest en doorstuurt naar deze class :)
Das niet handig bij het inloggen, kun je beter synchroon doen, is veel makkelijker... Als je eenmaal ingelogd bent kun je het beste je while loop maken, altans zo doe ik het, suc6 verder!!!

edit:

als je het namelijk in een andere thread doet moet je gaan synchroniseren met wait() en notify() en waarom zou je moeilijk doen als het makkelijk kan!


[edit2]
kijk anders ook eens http://www.venkydude.com :)
[/edit2]

Pentium 233MHz MMX + Diamond Monster 3D 3DFX Voodoo II


  • bazzs2001
  • Registratie: April 2002
  • Laatst online: 13-06 11:18

bazzs2001

je moet knagen wat lekker is

Hier staat mijn oude client, ik ben nu aan een nieuwe bezig, maar dat zal nog wel even duren.
:
http://members.rott.chello.nl/gijzenw/client.zip

ik gebruik (in elk geval in mijn nieuwste versie, hier geloof ik nog niet en ik heb de nieuwste versie hier niet bij de hand) een aparte Thread om heel de tijd alles te lezen (reader.readline())

ik denk dat dat het makkelijkst is, dat zou het probleem op moeten lossen(ik moet alleen ervoor zorgen dat die thread weggegooid wordt als de verbinding is verbroken, dat is hier nog niet :Z (100% CPU usage na uitloggen ;()

groeten


Verwijderd

om even in hetzelfde topic te blijven.
Een nieuwe vraag:

Ik ben ondertussen zo ver dat ik ingelogd ben, ik maar een verbinding met de SwitchBoard server en stuur al een berichtje terug zodra iemand een session opent met mijn bot.

Alleen als iemand een bericht stuurt naar mijn bot komt de text van het bericht pas aan bij het volgende bericht van de SB server.

voorbeeld:
code:
1
2
3
4
5
SB server: MIME-Version: 1.0
SB server: Content-Type: text/plain; charset=UTF-8
SB server: X-MMS-IM-Format: FN=Verdana; EF=; CO=800000; CS=0; PF=22
SB server:
SB server: halloBYE timanrebel@hotmail.com

dus pas als ik de conversation verlaat komt de text van mijn bericht binnen (hier dus 'hallo') Kan hierover niks vinden in de search, iemand had het probleem maar nooit de oplossing.
Iemand van jullie dan misschien?

[edit]
Mischien makkelijk als ik de code post waarmee ik de berichten op de socket afvang :)
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public void run()
{
    while (!sniff)
    {
         try
         {
             protocol.processAnswer( in.readLine() );
         }
         catch(IOException e)
         {
        sniff = true;
        System.out.println(">> Connection Closed by Server");
        //e.printStackTrace();
        System.exit(1);
         }
    }
}

processAnswer verwerkt de antwoorden en print ze op het scherm, daar komt die afvang ook vandaan

  • MisterData
  • Registratie: September 2001
  • Laatst online: 07-09 20:23
Op dinsdag 23 april 2002 16:06 schreef Trebel het volgende:
om even in hetzelfde topic te blijven.
Een nieuwe vraag:

Ik ben ondertussen zo ver dat ik ingelogd ben, ik maar een verbinding met de SwitchBoard server en stuur al een berichtje terug zodra iemand een session opent met mijn bot.

Alleen als iemand een bericht stuurt naar mijn bot komt de text van het bericht pas aan bij het volgende bericht van de SB server.

voorbeeld:
code:
1
2
3
4
5
SB server: MIME-Version: 1.0
SB server: Content-Type: text/plain; charset=UTF-8
SB server: X-MMS-IM-Format: FN=Verdana; EF=; CO=800000; CS=0; PF=22
SB server:
SB server: halloBYE timanrebel@hotmail.com

dus pas als ik de conversation verlaat komt de text van mijn bericht binnen (hier dus 'hallo') Kan hierover niks vinden in de search, iemand had het probleem maar nooit de oplossing.
Iemand van jullie dan misschien?
Is het in Java? ik neem aan van wel. Ik denk dat je voor het ontvangen van berichten een while-loop gebruikt met een in.readLine() ofzo erin gebruikt. In dat geval moet je een aparte mothode maken in de klasse waar je je berichten ontvangt. Deze moet dan ongeveer zo werken :
code:
1
2
3
4
5
6
7
8
public String readMSNMessage() {
  StringBuffer t = new StringBuffer();
  while(in.ready()) {
    t.append(in.read());
  }

  return t.toString();
}

...of iets in die richting. Veel succes :)

Verwijderd

Had als edit wat code gepost..
Om de een of andere vage reden geeft in.ready() bij mij altijd false, ook al staat er wel data te wachten op een bijvoorbeeld readLine()...

Ik krijg dus ook wel alles binnen, alleen tot de message text.
Misschien omdat daar geen '\n\r' achter geplakt is?
Zal eens checken of ik dat ook kan uitleven, met iets anders dan readLine()

  • nxt
  • Registratie: November 2001
  • Laatst online: 26-08 13:51

nxt

Op dinsdag 23 april 2002 16:06 schreef Trebel het volgende:
...Alleen als iemand een bericht stuurt naar mijn bot komt de text van het bericht pas aan bij het volgende bericht van de SB server.

voorbeeld:
code:
1
2
3
4
5
SB server: MIME-Version: 1.0
SB server: Content-Type: text/plain; charset=UTF-8
SB server: X-MMS-IM-Format: FN=Verdana; EF=; CO=800000; CS=0; PF=22
SB server:
SB server: halloBYE timanrebel@hotmail.com

...
in.readLine()
...
je vergeet het belangrijkste deel, nl
voordat de server MIME-Version... zend
zend ie eerst een regel
die begint met MSG, daarin wordt ook het aantal bytes genoemd wat je nog moet inlezen (dat zijn dus de headers (MIME-Version en verder en het complete bericht)

waar het bij jou fout gaat is dat je readLine gebruikt,
deze returned pas zodra ie een \r\n tegenkomt,
en omdat een bericht NIET eindigt met \r\n, komt het laatste stukje pas binnen bij het volgende bericht

dus de oplossing is om uit die eerste regel (die begint met MSG) het aantal bytes te halen dat je nog moet lezen
en dit dan vervolgens in te lezen met
read(char[] cbuf, int off, int len)

oh ja, vergeet niet dat de meeste berichten een UTF-8 encoding hebben

Verwijderd

Ik verbaas me erover dat dit werkt, want meestal moet je ook nog een flush() doen op een stream voordat je op het antwoord gaat zitten wachten... :+

Blijkbaar is de onderliggende stream hier niet gebufferd of doet ie een automatische flush, maar 't kan natuurlijk geen kwaad om je code daar niet van uit te laten gaan.

Verwijderd

Op dinsdag 23 april 2002 23:43 schreef nxt het volgende:

[..]

dus de oplossing is om uit die eerste regel (die begint met MSG) het aantal bytes te halen dat je nog moet lezen
en dit dan vervolgens in te lezen met
read(char[] cbuf, int off, int len)

oh ja, vergeet niet dat de meeste berichten een UTF-8 encoding hebben
De content-length heb ik idd gebruikt als oplossing :)

Nu nog even opzoeken over die UTF-8 encoding

[edit]
Ohhh.. UTF-8 encoding = URLEncode/URLDecode zeg maar (%20 = ' ')
Pagina: 1