Gathering of Tweakers

Quicksearch
TEC
Berichten: 1859
Reg. datum: 05 juni 2001

Hoi allemaal,

ik wordt helemaal gek van het volgende probleem. Nadat mijn eigen code niet werkte heb ik meerdere code samples van het internet geplukt om te testen maar elke keer werkt het niet en geeft het hetzelfde probleem. Connecten van een client naar de server lukt maar verstuurde data van de client naar de server komt niet aan. Pas als ik disconnect (vanuit de client, ik gebruik hier Socket Workbench voor als test) print de server de ontvangen data... :/

de server print het volgende naar de console, de schuingedrukte tekst komt pas als ik disconnect...
Attempting to listen for clients on port: 4444
Listening for clients on port: 4444
RECEIVED:test tekst


Op de client krijg ik helemaal niks terug van de server... Ik snap het niet meer :'(
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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
import java.net.*;
import java.io.*;

public class ServerGeval {
    
    public static void main(String[] args) throws IOException {
        boolean _listening = true;
        ServerSocket _serverSocket = null;
        
        try {
            System.out.println ("Attempting to listen for clients on port: 4444");
            _serverSocket = new ServerSocket(4444);
        }
        catch (IOException  e) {
            System.out.println("Could not listen on port: 4444");
            System.exit(-1);
        }
        
        System.out.println ("Listening for clients on port: 4444");
        
        while(_listening) {
            new ServerGevalThread(_serverSocket.accept()).start();
        }
        
        _serverSocket.close();        
    }
}




import java.net.*;
import java.io.*;

public class ServerGevalThread extends Thread {
    
    private Socket _clientSocket; 
    private BufferedReader _in;
    private PrintWriter _out;
    
    public ServerGevalThread(Socket clientSocket) {
        super("ServerGevalThread");
        this._clientSocket = clientSocket;
    }
    
    public void run() {

        try {
            String inputLine;
            
            _in = new BufferedReader(new InputStreamReader(_clientSocket.getInputStream()));
            _out = new PrintWriter(_clientSocket.getOutputStream(),true);
            
            while ((inputLine = _in.readLine()) != null)
            {
                _out.println("THANKYOU FOR THIS LINE:" + inputLine);
                _out.flush();
                
                System.out.println("RECEIVED:" + inputLine);
            }
        } 
        catch (IOException e) {
            e.printStackTrace();
        }
    }
}

 
++?????++ Out of Cheese Error

Toon ons ook even je clientcode. Je server code ziet er op het eerste gezicht goed uit.

'Nae King! Nae quin! Nae Laird! Nae master! We willna' be fooled agin!'

heeft een echte avatar

Je doet een readLine. Dat betekent dat deze method pas output geeft zodra er een line break komt, of de hele stream is gelezen. Daarom print hij dus meteen zodra de client disconnect - de stream houdt gewoon op.

Probeer dus ook println aan de client kant te gebruiken. Die stuurt dan de line break mee.

More than meets the eye
There is no I in TEAM... but there is ME
Stanzinist | system specs

En vergeet de flush() aan de client kant niet ;)

En leer aub dat underscore prefix voor class variabelen af :X Gebruik een goede IDE, dan zie je aan de subtiele kleurverschillen van je variabelen wel of het class variablen zijn of niet. ;)

Om nooit te vergeten: Han = Merely/XceeD/Merely O-) :P
Foto gallery || Mijn avonturen in Zürich

Prince of Persia!

Klinkt inderdaad als een buffering probleem. Laat de client na elke send de buffer flushen. Ik ben zelf niet bekend met Java, maar als er een auto-flush feature is wil je dat wel gebruiken denk ik.

Reporter: Mister Gandhi, what do you think of western civilisation?
Gandhi: I think it would be a good idea

Voor testdoeleinden:
Probeer eens met telnet: telnet localhost 4444
En vervolgens je zin gevolgd door enter.

Dan kun je in ieder geval testen of deze server code bij jou werkt.

Voor de client kant: Inderdaad wat anderen zeggen, waarschijnlijk vergeet je te flushen.

Local Area Netdork | Stanford University Network
Sun Certified Java Programmer | Sun Certified Web Component Developer | OMG Certified UML Professional | Sun Certified Developer for Java Web Services

TEC
Berichten: 1859
Reg. datum: 05 juni 2001

thanks!

er moest een \r\n meegestuurd worden vanuit de client...

telnet doet dit schijnbaar automagisch.
 
Berichten: 3535
Reg. datum: 29 november 2000

Waarom hardcoded \r\n? Dit is windows-specifiek. Je kunt dan beter of een println() uitvoeren, of printf() met een %n in de format.
 
TEC
Berichten: 1859
Reg. datum: 05 juni 2001

De client is niet in java maar in actionscript 3. Het is een AIR applicatie, voor zover ik zie kan ik niet een line sturen.
 

Acties: [view][quote]


Door: Janoz Moderator PRG/SEA/DTE
!litemod
Berichten: 14.602
Reg. datum: 19 oktober 2000

Ten eerste, telnet doet dat niet automagisch, maar gewoon wanneer je op de enter knop drukt. Daarnaast buffert telnet niks dus elk teken dat je tikt wordt ook gelijk doorgestuurd.

Ten eerste zou je ipv readline ook read kunnen gebruiken. Dan hoef je niet op een enter te wachten. Wanneer je vervolgens ook ervoor zorgt dat de client zijn buffer flushed op het moment dat hij het bericht wil versturen moet dat ook goed gaan.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'

Kleine ietwat offline tip:
Als het allemaal scalable moet enzo, zou je kunnen kijken naar Apache MINA

-- SoftwareSystems the_Tzar(Coffee coffee){ //the only method you need... -- specs workstation



© 1998-2008 Tweakers.net BV - Based on React - Hosted by True - Served by Adrastos

© 1998-2008 Tweakers.net BV - Based on React - Hosted by True - Served by Adrastos

[RSS][XML]

Update Tracker

Active Topics
Active Topics
Frontpage Nieuws
Frontpage Nieuws