Toon posts:

[Java] Socket probleem

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik gebruik 2 sockets om bestanden over te sturen.

Een applicatie maakt gebruik van een ServerSocket en de andere van een ClientSocket.

Nu moet de ClientSocket dus iets sturen naar de server om het downloaden van 1 of meerdere bestanden te laten starten.

Ik maak daarvoor een OutputStream aan en schrijf dus een aantal bytes naar de ServerSocket.

Vervolgens flush ik het. Alleen bij de ServerSocket komt het alleen binnen als ik bij de client de OutputStream closed.

Maar daardoor ontstaan weer andere problemen. De clientsocket wordt hierdoor ook automatisch geclosed.

Maar als ik een flush doe, dan moet het toch bij de server socket aankomen?

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03-09 13:30

.oisyn

Moderator Devschuur®

Demotivational Speaker

probeer het eens met TCP delay uit (kijk naar setTcpNoDelay () van Socket)

note: TCP delay uit is dus TCP NO delay aan, dus je geeft true mee met die functie ;)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Verwijderd

Topicstarter
Nee werkt niet.

Ik moet de DataOutputStream echt closen voordat de server iets ontvangt.

En dit lijkt mij vrij onlogisch.

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Waarschijnlijk gebruik je op de server-side blocking IO: de server stopt pas met lezen als de InputStream 'op' is en de OutputStream op de client dus gesloten wordt. Hierdoor zal het commando wat jij geeft dus pas geinterpreteerd gaan worden als jij de zaak sluit.

Wat je kan doen is een teken invoeren om je commando af te sluiten (newline bijvoorbeeld). De server moet dan het commando al gaan uitvoeren als het wordt afgesloten.

Ook kan je gelijk voor een zwaardere oplossing kiezen: stuur je boodschappen via een standaard. Je kan hierbij kiezen voor XML, eventueel zelfs XML-RPC. Als je binnen Java kunt blijven kan je ook RMI nemen. Je hebt bij allebei de zwaardere oplossingen geen gezeur meer met het exacte formaat van opdrachten, scheidingen, sockets enzovoorts :) .

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


  • porn*
  • Registratie: Januari 2001
  • Laatst online: 26-08 13:24

porn*

...take on the world!

Heb ik ook eens gehad, volgens mij is dat een kwestie van een bufferinstelling aanpassen. Heb alleen effe geen J-compiler om het te testen. :(

Bnet pindle#2913


Verwijderd

Wil je niet te veel bytes lezen aan de server kant?

Wanneer dat het geval is blocked hij tot het gewenste aantal binnen is óf de verbinding verbroken wordt :)

Verwijderd

Topicstarter
Het uitlezen op de server gebeurt als volgt:
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
    private ServerSocket Server = null;
    private Socket ClientSocket = null;
    
    private DataInputStream InputStream;
    private DataOutputStream OutputStream;


    while (true)
    {
        ClientSocket = Server.accept();
        InputStream = new DataInputStream(ClientSocket.getInputStream());
        
        Data = InputStream.readLine();

        if (Data != null)
        {
        

    
        }
        InputStream.close();
        ClientSocket = null;
        
    }

Verwijderd

Stuur je wel een new-line als laatste char? Anders staat ie daar op te wachten wellicht?

edit:

Check eens met available() of er zowiezo iets in z'n input buffer staat.

Verwijderd

Topicstarter
Op vrijdag 31 mei 2002 19:27 schreef Digital_Cow het volgende:
Stuur je wel een new-line als laatste char? Anders staat ie daar op te wachten wellicht?

edit:

Check eens met available() of er zowiezo iets in z'n input buffer staat.
Thnx,

dat was ik idd vergeten.

Ja eigenlijk had ik daar helemaal geen erg in. |:(

Maar het werkt nu perfect
Pagina: 1