Avatar billede 2c Nybegynder
06. november 2004 - 16:07 Der er 4 kommentarer og
1 løsning

Java TCP problem

Hej, jeg er ved at lave et peer to peer program i java.

Det eneste det skal kunne, er at de forskellige peers skal kunne pinge hinanden.

Min status på det nu, er: Starter jeg en peer på en computer, og pinger den fra en anden peer på en anden computer virker det fint nok. Men pinger jeg igen går det galt.

Peeren som modtager et ping kan blive ved med at virke så længe den bare står at lytter til pings og svarer tilbage, så jeg tror det er den tråd der sender ping ud, at det er galt med.

Stack trace ser således ud:

at java.net.PlainSocketImpl.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at java.net.Socket.<init>(Unknown Source)
at java.net.Socket.<init>(Unknown Source)
at PeerSender.run(PeerSender.java:67)
at java.lang.Thread.run(Unknown Source)

Hvis der var nogen der havde en anelse om hvad det måske kan være, ville det være fedt.
Avatar billede arne_v Ekspert
06. november 2004 - 16:10 #1
Den skriver ikke en exception ud ??
Avatar billede 2c Nybegynder
06. november 2004 - 16:12 #2
Koden der kører inde i den tråd der sender ping ser således ud:

senderSocket  = new Socket(inputSring, JavaTella.RECIEVING_TCP_PORT);
this.dis = new DataInputStream(senderSocket.getInputStream());
this.dos = new DataOutputStream(senderSocket.getOutputStream());

cmd = new Command(dos);
TTL = (byte)0x0;
hop = (byte)0x0;
cmd.ping(gennerateGuid(), TTL, hop);

short guid = dis.readShort();
  if(checkGuid(guid))
  {
    System.out.println("GUID ok");
    byte payloadDescriptor = dis.readByte();
    if(payloadDescriptor==JavaTella.PONG_ID){
      /**We allready know the values of the three next blocks (TTL, hop and payload length) so we just read them and do nothing with them.*/
      TTL = dis.readByte(); //Read the TTL
      hop = dis.readByte(); //Read hop
      int payloadLength = dis.readInt(); //We allready know it is 14.
      Peer peer = new Peer();
      peer.setPort(dis.readShort());
      byte[] ip = new byte[4];
      for(int i = 0; i < ip.length ; i++)
        ip[i] = dis.readByte();
      //String stringIP = new String(ip);
      //peer.setIp(stringIP );
      //We know the IP of the connection
      peer.setIp(inputSring);
      peer.setNumberOfFilesShared(dis.readLong());
      peer.setNumberOfKbytesShared(dis.readLong());
      peerManager.addPeer(peer);
      peer.show();
Avatar billede 2c Nybegynder
06. november 2004 - 16:15 #3
Exception.getmessage skriver :

62.107.23.44[Ljava.lang.StackTraceElement;@6eb38ajava.net.UnknownHostException:

62.107.23.44
Avatar billede killercow Nybegynder
07. november 2004 - 11:36 #4
Er det en valid ip adresse ? Der ser ud som om, at den ip du sender ned til socketen, ikke bliver genkendt som værende en valid ip adr.
Avatar billede 2c Nybegynder
07. november 2004 - 15:18 #5
Jeg beklager det meget kryptiske spørgsmål, men jeg var vist lidt i vildrede den dag.

Det viste sig at den ip jeg fik startede med et linieskift, og derefter ip. Derfor fik jeg fejlen.

Så hvad killercow siger er rigtigt.

Men jeg kender ham, og han var der idag da vi fandt problemet, så ingen point til ham :)

Men jeg lukker her.
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