06. november 2004 - 16:07Der 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.
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();
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.
Synes godt om
Ny brugerNybegynder
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.