Permalänk

Java, klient/server socket.

Hej!
Har ett problem som jag för tillfället inte får bukt på. Jag har skapat ett program där 2 stycken personer kan rita grafiska objekt för varandra.
Problemet är att anslutningen fungerar perfekt för vissa personer, och för andra så droppar den hela tiden.
Programmet kör med TCP. Varje person agerar som både klient och server. När man ritar något anropas metoden sendData som skickar till den andra personen, mottagande personen har en tråd som lyssnar på inkommande traffik, tar emot den och uppdaterar panelen med informationen.

Någon som kan se uppenbara fel i koden som får programmet att droppa anslutningen för vissa?

import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; public class Connection implements Runnable { private int myPortNr; private String remote; private int toPortNr; private Draw draw = null; private Socket socket = null; private PrintWriter out = null; public Connection (Draw draw, int myPortNr, int toPortNr, String remote) { this.draw = draw; this.myPortNr = myPortNr; this.remote = remote; this.toPortNr = toPortNr; new Thread (this).start (); } public void sendData (String str) throws IOException { socket = new Socket (this.remote, this.toPortNr); out = new PrintWriter (socket.getOutputStream (), true); out.println (str); out.close (); socket.close (); } public void run () { String str = ""; Socket socketIncoming = null; BufferedReader in = null; ServerSocket serverSocket = null; try { serverSocket = new ServerSocket (this.myPortNr); while (true) { socketIncoming = serverSocket.accept (); in = new BufferedReader (new InputStreamReader (socketIncoming.getInputStream ())); str = in.readLine (); if (str.length () <= 5) draw.addClearAllLines (str); else if (str.length () <= 10) draw.addEraseLine (str); else draw.addLine (str); } } catch (IOException ex) { ex.printStackTrace (); } finally { try { in.close (); socketIncoming.close (); serverSocket.close (); } catch (IOException ex) { ex.printStackTrace (); } } } }

Visa signatur

Datorn: i7 3770k, Gigabyte GA-Z77-DS3H, Corsair Vengeance 16gb, Gtx 680, Samsung 830 SSD 256gb, Seagate 1Tb, Fractal design R4, Corsair HX750 750W, DELL U2711.

Studerar: Civilingenjör IT på KTH, började HT 2009 och blir klar sommaren 2014.

Permalänk
Medlem

*Jag antar att det är bara en tråd som använder funktionen sendData och draw funktionerna?

*En fråga bara: Varför skapa nya sockets varje gång du ska skicka? Kan du inte använda samma? Som är nog också lite mer kostnads effektivt

Jag ser inget direkt problem i koden. Svårt för oss att hitta ditt problem utan att pröva själva.

Visa signatur

OS: Win7 x64, GPU: Geforce Gigabyte GTX580 SOC
CPU: Intel i5 2500k (4.5gHz), MB: Asus P8P65 PRO Rev(3.1),
PSU: XFX 750w (modular), RAM: 2x Crosair Vengence 1600mz 4024mb
Cooling: CoolIT ECO A.L.C CPU COOLER
Chassi: Raven rv03

Permalänk

*Jag antar att det är bara en tråd som använder funktionen sendData och draw funktionerna?
Svar: Stämmer.

*En fråga bara: Varför skapa nya sockets varje gång du ska skicka? Kan du inte använda samma? Som är nog också lite mer kostnads effektivt
Svar: Oj... Klantigt fel att göra när man är trött

Har testat med 12 personer nu, 3 stycken som hade problem. Antar att det är andra problem som ligger bakom, deras nätverk etc..

Visa signatur

Datorn: i7 3770k, Gigabyte GA-Z77-DS3H, Corsair Vengeance 16gb, Gtx 680, Samsung 830 SSD 256gb, Seagate 1Tb, Fractal design R4, Corsair HX750 750W, DELL U2711.

Studerar: Civilingenjör IT på KTH, började HT 2009 och blir klar sommaren 2014.

Permalänk

Hähä jag har gjort precis samma uppgift till en kurs på SU! Ska kika om jag har någon kod kvar ...

Permalänk

Ah. Har precis programmerat klart så att man kan använda olika färger, sudda lite, sudda allt, en chatt, bifoga bilder(bägge parterna kan justera bilderna), spara ned bilder. Allt sker i båda anslutna programmen. Implementerar just nu så att med en enkel knapptryckning förvandlar ritverktyget till ett skissa&gissa spel Servrar skall radas upp, vilka som är inne och spelar m.m. Då väljer man i menyn om man skall köra multiplayer(server) eller mot varandra.

Visa signatur

Datorn: i7 3770k, Gigabyte GA-Z77-DS3H, Corsair Vengeance 16gb, Gtx 680, Samsung 830 SSD 256gb, Seagate 1Tb, Fractal design R4, Corsair HX750 750W, DELL U2711.

Studerar: Civilingenjör IT på KTH, började HT 2009 och blir klar sommaren 2014.