Archief - [PROG][JAVA] Chat client

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

Sh@rky1337

Legacy Member
hallo,

Ik moet dus een chatclient maken, de GUI is reeds af, enkel nog wat details. Maar met de sockets gaat het niet zo goed. En aan die tutorial ervan bij java.sun heb ik niet zo veel. Het enige wat ik zou willen is een deftig voorbeeld. niet noodzakelijk met gui, en liefst ook geen applet.

Alvast bedankt,

Passoa

Legacy Member
Hey

een medestudent uit Gent? (kahosl) :D

Ik ben ook nog wat aan het zoeken hoe die sockets precies werken. Momenteel kan ik je nog niet verder helpen maar mss na vanavond wel.
Let op de mss. (beetje lui :s)
cu

Hale

Legacy Member
is het noodzakelijk om met sockets te werken ?
anders moet je is kijken naar java RMI.. dat maakt het een pak eenvoudiger om remote applicaties te schrijven

jodeman

Legacy Member
.Acku. zei:
Is uw topic weg?

Ja, dacht dat niemand mijn code wou gaan lezen en is komen zeggen wat ik net verkeerd doe. Dus dacht dat ik beter de problemen dat ik had apart te gaan posten dat ik daar dan meer antwoord op zou krijgen. Want heb gisteren niks gedaan omdak gewoon vast zit :ironic:.

Sh@rky1337

Legacy Member
k, ik kan reeds met de server tegen de client praten en omgekeerd, maar nu heb ik het probleem dat server en client slecht elk op toer kunnen typen. dus de een moet wachten tot de ander geantwoord heeft, en ik begin steeds met de server.


HTML:
import java.io.*;
import java.net.*;

public class KnockKnockClient {
    public static void main(String[] args) throws IOException {

        Socket kkSocket = null;
        PrintWriter out = null;
        BufferedReader in = null;

        try {
            kkSocket = new Socket("127.0.0.1", 4444);
            out = new PrintWriter(kkSocket.getOutputStream(), true);
            in = new BufferedReader(new InputStreamReader(kkSocket.getInputStream()));
        } catch (UnknownHostException e) {
            System.err.println("Don't know about host: taranis.");
            System.exit(1);
        } catch (IOException e) {
            System.err.println("Couldn't get I/O for the connection to: taranis.");
            System.exit(1);
        }

        BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));
        String fromServer;
        String fromUser;

        while ((fromServer = in.readLine()) != null) {
            System.out.println("Server: " + fromServer);
            if (fromServer.equals("Bye."))
                break;
		    
            fromUser = stdIn.readLine();
	    if (fromUser != null) {
                System.out.println("Client: " + fromUser);
                out.println(fromUser);
	    }
        }

        out.close();
        in.close();
        stdIn.close();
        kkSocket.close();
    }
}

en de server

HTML:
import java.net.*;
import java.io.*;

public class KnockKnockServer
{
	
    public static void main(String[] args) throws IOException 
    {
        ServerSocket serverSocket = null;
        try 
        {
            serverSocket = new ServerSocket(4444);
        } 
        catch (IOException e) 
        {
            System.err.println("Could not listen on port: 4444.");
            System.exit(1);
        }

        Socket clientSocket = null;
        try 
        {
            clientSocket = serverSocket.accept();
        } 
        catch (IOException e) 
        {
            System.err.println("Accept failed.");
            System.exit(1);
        }
		
		Input inp = new Input();
        PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
        BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
        String inputLine, outputLine;

        outputLine = inp.readLine();
        out.println(outputLine);

        while ((inputLine = in.readLine()) != null) 
        {
        	System.out.println("Client: " + inputLine);
             outputLine = inp.readLine();
             out.println(outputLine);
             if (outputLine.equals("Bye.")) break;
        }
        out.close();
        in.close();
        clientSocket.close();
        serverSocket.close();
    }
}

MemberX

Legacy Member
Hallo,

Een socket werkt waarschijnlijk zoals een walkie talkie --> 1 iemand kan maar verzenden. Twee jaar geleden heb ik ook een gelijkaardig Java project moeten maken.
Je zal uw server een beetje ingewikkelder moeten maken door twee sockets te gebruiker, eentje om data te ontvangen en eentje om data te versturen naar de client.
Let wel dat deze manier niet helpt om meerdere clients te verbinden met één server. Indien je dit wenst zal je van elke client het ip moeten bijhouden. Plus moet je kunnen herkenen welke client welk bericht heeft gestuurd.

Groeten

klennepette

Legacy Member
2 sockets gebruiken is overbodig.
sockets hebben namelijk 2 buffers, een sendbuffer en een receivebuffer
Hoe groot die buffer default is weet ik niet juist maar je kan de grootte ervan instellen met
sock.setSendBufferSize(int size)
sock.setReceiveBufferSize(int size)

Wat je moet doen is een oneindige loop maken die afloopt wanneer de socket niet meer verbonden is. In deze loop kijk je telkens na of er beschikbare data is in de receivebuffer en flush je de sendbuffer (flushen wil zeggen alle data in de sendbuffer daadwerkelijk verzenden).

Voor meer info over sockets in Java verwijs ik u graag naar volgende sites:
http://java.sun.com/j2se/1.4.2/docs/api/java/net/Socket.html
http://www.ryerson.ca/~dgrimsha/courses/cps841/sockets.html
Daar zou je normaal alle info moeten kunnen vinden om uw probleem op te lossen.
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan