Java Socket vil ikke forbinde til irc channel

Tags:    java socket irc

Jeg er igang med at kode en irc-bot der ligger og lytter til irc.freenode.net #archlinux. (Et eller andet skulle den lytte til, skifter channel når jeg har lavet det færdigt). Så snart der bliver skrevet "tihifnislolkage" inde på #archlinux, så skulle min bot gerne eksekvere notepad via CMD.

Det ser ud til at den connecter helt fint til irc.freenode.net, da jeg får dette output:
Fold kodeboks ind/udKode 


Da jeg connecter min socket til irc.freenode.net her:
Fold kodeboks ind/udJava kode 


Jeg bruger en Thread til at lytte på kanalen. Det hele ser ud til at gå helt fint, indtil programmet har kørt i et minut eller sådan noget. Så får jeg IOException. Her er run metoden:
Fold kodeboks ind/udJava kode 



Her er alt min kode

Main.java
Fold kodeboks ind/udJava kode 


SocketClient.java
Fold kodeboks ind/udJava kode 


Her er mit output, inden jeg får error:
Fold kodeboks ind/udKode 


Her er mit output, efter jeg får error:
Fold kodeboks ind/udKode 




Indlæg senest redigeret d. 13.07.2013 14:13 af Bruger #16945
9 svar postet i denne tråd vises herunder
2 indlæg har modtaget i alt 12 karma
Sorter efter stemmer Sorter efter dato
Prøv at sniffe trafikken med Wireshark og se om serveren accepterer dine kommandoer, for jeg er ret sikker på, at IRC ikke forstår UTF.
Du skal nok snarere sende det som ascii.



IDENT er ikke nødvendigt...stort set ingen klienter kan modtage IDENT opslag da de står bag firewalls og routere, som ikke tillader indgående forbindelser. irc.freenode.net kræver det heller ikke.

Du sender aldrig dit nick/user, så jeg gætter på at serveren sparker din forbindelse. Når jeg sniffer, får jeg følgende fra serveren:
Fold kodeboks ind/udKode 


Edit:
Tror jeg fandt det. Din buffered writer skriver jo til en buffer, så den skal du flushe. Ellers kan du ikke være sikker på, at den skriver, og så skal alle dine kommandoer ende med "\r\n", ikke "\n\r", så jeg ændrede lidt her:
Fold kodeboks ind/udJava kode 


Så ser det ud til at virke.




Indlæg senest redigeret d. 15.07.2013 09:53 af Bruger #2695
Prøv at sniffe trafikken med Wireshark og se om serveren accepterer dine kommandoer, for jeg er ret sikker på, at IRC ikke forstår UTF.
Du skal nok snarere sende det som ascii.


Bruger nu BufferedReader og BufferedWriter. Det virker MEGET bedre! Der sker noget nu.

Jeg får følgende output:
Fold kodeboks ind/udKode 


Tror det er i linjen:
Fold kodeboks ind/udKode 

At fejlen bliver identificeret.

Har kun ændret i SocketClient.java som nu ser således ud:
Fold kodeboks ind/udJava kode 




Uden at være en IRC haj, tør jeg vove at påstå serveren kræver du lytter på port 113 til ident protokollen.

http://en.wikipedia.org/wiki/Ident_protocol

http://stackoverflow.com/questions/13381895/responde-to-no-ident-response-on-irc

http://tools.ietf.org/html/rfc1413

Måske du kan finde en server som ikke kræver ident, så du kan sikre dig at det er problemet?



Uden at være en IRC haj, tør jeg vove at påstå serveren kræver du lytter på port 113 til ident protokollen.

http://en.wikipedia.org/wiki/Ident_protocol

http://stackoverflow.com/questions/13381895/responde-to-no-ident-response-on-irc

http://tools.ietf.org/html/rfc1413

Måske du kan finde en server som ikke kræver ident, så du kan sikre dig at det er problemet?


o.o - Har læst lidt og det ser ud til at alt IRC bruger Ident.. Forstår ikke meget af det stackoverflow svar :S

Skal jeg lave endnu en socket som connecter til IRC kanalen, via TCP port 13? Også får jeg noget data fra serveren, som jeg så skal bruge i min anden socket? Også kan jeg bare lukke TCP: 13 socketen ned? Eller?



IDENT er ikke nødvendigt...stort set ingen klienter kan modtage IDENT opslag da de står bag firewalls og routere, som ikke tillader indgående forbindelser. irc.freenode.net kræver det heller ikke.

Du sender aldrig dit nick/user, så jeg gætter på at serveren sparker din forbindelse. Når jeg sniffer, får jeg følgende fra serveren:
Fold kodeboks ind/udKode 


Edit:
Tror jeg fandt det. Din buffered writer skriver jo til en buffer, så den skal du flushe. Ellers kan du ikke være sikker på, at den skriver, og så skal alle dine kommandoer ende med "\r\n", ikke "\n\r", så jeg ændrede lidt her:
Fold kodeboks ind/udJava kode 


Så ser det ud til at virke.


Tusind tak! Det hele virker nu! Tænk engang at jeg glemte at sende det hele afsted...



Tænk engang at jeg glemte at sende det hele afsted...


Wireshark er netværksprogrammørens bedste ven.



Tænk engang at jeg glemte at sende det hele afsted...


Wireshark er netværksprogrammørens bedste ven.


I'll read into it



Vil det ikke gå galt på et eller andet tidspunkt? Synes ikke jeg kan se et ping nogen steder. Eller det kan være du har undladt det?

Mvh. En lige så interesseret IRC bot udvikler, https://github.com/mslot/IRCSharp :)



t