[Java]Tekst verzenden door sockets, vertraging?

Status
Niet open voor verdere reacties.

niekfct

Terugkerende gebruiker
Lid geworden
19 jul 2006
Berichten
1.563
[Java]Chatprogramma

Hoi

Wij maken als eindopdracht voor het vak informatica in 6VWO een chatprogramma. We hebben nu een begin, dat in cmd wordt uitgevoerd. Om even te kijken of het lukt om de tekst te verzenden kan de client tekst versturen naar de server, en de server stuurt dit weer terug. De tekst komt bij beide (client en server) op het scherm te staan. Ik heb de code op dit moment nog niet tot mijn beschikking, hij staat op school op het netwerk, maar het is iets als dit (essentiële gedeelte van de server (is een thread), gebaseerd op KnockKnock van Sun, link):

PHP:
PrintWriter out = new PrintWriter(
                      clientSocket.getOutputStream(), true);
BufferedReader in = new BufferedReader(
                        new InputStreamReader(
                            clientSocket.getInputStream()));

String inputLine, outputLine;
while ((inputLine = in.readLine()) != null) {	
    outputLine = inputLine;
    out.println(outputLine);
    System.out.println(outputLine);
    if outputLine.equals("Bye."))
        break;
}

Als de client wat stuurt, krijgt de server niet alles door, maar sommige dingen. En wat me opviel, bij het sturen van 1,2,3,4,5,6,7,8,9 kwamen alleen 3,6,9 door. (Na elk getal sturen). Hoe zit dit? De leraar had het erover dat het misschien iets was met de buffer, maar veel meer wist hij er ook niet van..

Groet,
Niek
 
Laatst bewerkt:
Dit ziet er op zich niet heel vreemd uit. Als je meer code hebt dan is het misschien wat makkelijker om oorzaken te zoeken en uit te sluiten.

Vast een kleine tip: het gebruik van break wordt over het algemeen niet echt aangeraden. Je kunt hier bijvoorbeeld beter een boolean gebruiken om uit de loop te springen:
Code:
boolean stop = false;
...
while (!stop && ((inputLine = in.readLine()) != null)) {    
    ...
    if outputLine.equals("Bye."))
        stop = true;
}

Zeker als je geneste loops hebt, dus loop in loop, dan is het gedrag van break statements erg onduidelijk en kun je dus beter booleans gebruiken.
 
Ik kan de volledige code morgen online zetten, en als ik het goed heb, heb ik die break er nog niet in zitten..:P..
 
Server code:
Code:
import java.net.*;
import java.io.*;

public class ChatServer {
    public static void main(String[] args) throws IOException {
        ServerSocket serverSocket = null;
        boolean listening = true;
		System.out.println("Starting Server...");

        try {
            serverSocket = new ServerSocket(4444);
        } catch (IOException e) {
            System.err.println("Could not listen on port: 4444.");
            System.exit(-1);
        }
		
		System.out.println("Listening for connections.");
        while (listening)
	    new ChatServerThread(serverSocket.accept()).start();

        serverSocket.close();
    }
}

Thread die per client wordt gestart:
Code:
import java.net.*;
import java.io.*;

public class ChatServerThread extends Thread {
    private Socket socket = null;

    public ChatServerThread(Socket socket) {
	super("ChatServerThread");
	this.socket = socket;
    }

    public void run() {

	try {
	    PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
	    BufferedReader in = new BufferedReader(
				    new InputStreamReader(
				    socket.getInputStream()));
		
		out.println("Verbonden, typ je tekst.");
		
		String inputLine;
		while ((inputLine = in.readLine()) != null)
		{
			out.println(inputLine);
			System.out.println(inputLine);
		}
		
	} catch (IOException e) {
	    e.printStackTrace();
	}
    }
}

code van de client:
Code:
	import java.net.*;
	import java.io.*;
public class ChatClient {

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

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

	        try {
	            kkSocket = new Socket("10.20.40.39", 4444);
	            out = new PrintWriter(kkSocket.getOutputStream(), true);
	            in = new BufferedReader(new InputStreamReader(kkSocket.getInputStream()));
	        } catch (UnknownHostException e) {
	            System.err.println("Couldn't connect te the server.");
	            System.exit(1);
	        } catch (IOException e) {
	            System.err.println("Couldn't get I/O for the connection to the server.");
	            System.exit(1);
	        }
			
	        BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));
	        String tekstin;
	        String tekstuit;
		String naam="Niek";
		out.println(naam + " has entered the chat.");

		 while (true){
			 tekstin = in.readLine();
			 	if (tekstin != null)
				{
					System.out.println(tekstin);
				}
				
				
				if (stdIn.readLine() != null){
	            tekstuit = naam + ": " + stdIn.readLine();
	                out.println(tekstuit);
			if (stdIn.readLine().equals("End"))
			break;
		    }
		    }
	        

	        out.close();
	        in.close();
	        stdIn.close();
	        kkSocket.close();
	    }
	}
 
Laatst bewerkt:
En na een halfuur flink zoeken en proberen kwam ik op het volgende uit:

Code:
String naam="Niek";
		out.println(naam + " has entered the chat.");

		 while (true){
			 tekstin = in.readLine();
			 	if (tekstin != null)
				{
					System.out.println(tekstin);
				}
				
				
				[COLOR="Red"]if (stdIn.readLine() != null){
	            tekstuit = naam + ": " + stdIn.readLine();
	                out.println(tekstuit);
			if (stdIn.readLine().equals("End"))
			break;[/COLOR]
		    }
		    }

Dat is een stukje code van de client, en ik heb dit eens aangepast naar:
Code:
String a = stdIn.readLine();
if (a != null){
	            tekstuit = naam + ": " + a;
	                out.println(tekstuit);
			if (a.equals("End"))
			break;

En toen bleek dat bij het invoeren van 1,2,3,4,5,6,7,8,9 steeds 2,4,6,8 doorkwam... al een vooruitgang!! :D :P

Toen eens geprobeerd "out.println(naam + " has entered the chat.");" weg te halen, en toen deed hij het perfect!! :D
 
Weet je nu ook waarom je slechts de helft van de nummers kon zien?

In de loop van de client controleerde je afwisselend op berichten afkomstig van de server en laat je de gebruiker iets invoeren. Om dat tegelijkertijd te kunnen doen zul je ook threads moeten gebruiken. Bijvoorbeeld 1 aparte thread die luistert naar berichten van de server, terwijl je in de andere zelf berichten kunt sturen.
 
Ok, we zullen dit meenemen in het proces, net als je tip over de break ;)

Je hoort nog meer van ons!:thumb:
 
Nu zijn we dus bij het punt aangekomen dat we de tekst die per thread binnenkomt, moeten doorsturen naar de overige threads. Maar we hebben geen idee hoe we deze verbinding kunnen maken. Kan iemand dit misschien uitleggen?
 
Je server accepteert inkomende verbindingen van clients en maakt voor elke verbinding een aparte ChatServerThread instantie aan. Nu doe je daar niets mee, maar je kunt ze door de server laten bijhouden. Stop bijvoorbeeld alle ChatServerThreads die je aanmaakt gelijk in een Vector.

Als een van de ChatServerThread instanties nou een bericht van de client ontvangt, dan kun je hem tegen de server laten vertellen dat het bericht naar iedereen gestuurd moet worden. De server kijkt dan welke ChatServerThreads hij allemaal heeft aangemaakt (die had je opgeslagen) en vertelt tegen hen allemaal dat ze het ene bericht naar hun client moeten sturen.

Hopelijk begrijp je het zo, anders zal ik het nog wat proberen te verduidelijken.
 
Ok, ik ben hier nu mee bezig, maar kom gelijk het probleem tegen van hoe ik een instantie van die thread in een vector stop.

zoals je ziet gebruiken we
Code:
vSocket = serverSocket.accept();
new ChatServerThread(vSocket).start();

ik heb een vector aangemaakt:
Code:
int AANTAL = 10;
Vector threads = new Vector(AANTAL);

En uiteindelijk heb ik de code zo aangepast:
Code:
vSocket = serverSocket.accept();
			ChatServerThread a = new ChatServerThread(vSocket);
			a.start();
			threads.add(a);
			try{
			System.err.println(threads.elementAt(0));
			System.err.println(threads.elementAt(1));
			}catch (ArrayIndexOutOfBoundsException e){
				System.err.println("FOUTJE");
			}

om te kjiken of het werkt, gebruik ik het try catch stukje, zodat er te staan komt wat er in de vector staat.
maar er komt 2 x hetzelfde uit. De eerste keer als een client verbindt, staat er:

Thread[ChatServerThread,5,main]
FOUTJE


de 2e keer

Thread[ChatServerThread,5,main]
Thread[ChatServerThread,5,main]


gaat dit verder wel goed, of moet ik het op een andere manier doen?

En je zegt dat een thread de server verteld dat het bericht naar iedereen doorgestuurd moet worden. Ik neem aan dat je de ChatServer bedoelt. Is deze niet alleen bezig met een lus die voor altijd doorgaat, en hij wacht in die lus bij het stukje vSocket = serverSocket.accept(); totdat er een client verbindt, toch? Dus zou je dan nog een thread aan moeten maken?

Niek

en een klein vraagje tussendoor, ik heb gelezen dat een vector uitgebreid kan worden. Is het stukje "= new Vector(AANTAL)" wel nodig? ik zag bij een voorbeeld dat het wel gebruikt werd namelijk.

edit: ik zie hier een soortgelijk programma. En volgens mij creeeren ze daar de vector in de threads.. Dus nu ben ik een beetje de draad kwijt :confused:
 
Laatst bewerkt:
Het is alweer een tijdje geleden dat ik met Java heb gewerkt, dus ik hoop dat m'n antwoorden nog steeds helemaal kloppen.

om te kjiken of het werkt, gebruik ik het try catch stukje, zodat er te staan komt wat er in de vector staat.
maar er komt 2 x hetzelfde uit. De eerste keer als een client verbindt, staat er:

Thread[ChatServerThread,5,main]
FOUTJE

de 2e keer

Thread[ChatServerThread,5,main]
Thread[ChatServerThread,5,main]

gaat dit verder wel goed, of moet ik het op een andere manier doen?
Je hebt een bepaald object en dat object wil je ergens naartoe wegschrijven. Voor dat wegschrijven heb je een String nodig, geen object. Daarom wordt door Java automatisch de method "toString()" aangeroepen die elk object erft van de klasse Object. Zolang je die niet zelf implementeert, wordt de standaard method van Object gebruikt (lang leve erven). Het kan dus inderdaad goed zijn dat van een paar verschillende objecten het resultaat hetzelfde is.

En je zegt dat een thread de server verteld dat het bericht naar iedereen doorgestuurd moet worden. Ik neem aan dat je de ChatServer bedoelt. Is deze niet alleen bezig met een lus die voor altijd doorgaat, en hij wacht in die lus bij het stukje vSocket = serverSocket.accept(); totdat er een client verbindt, toch? Dus zou je dan nog een thread aan moeten maken?
Dit los ik over het algemeen op door in de Client thread een variabele te zetten die de Server voorstelt en in de Server een method toe te voegen die een bericht naar alle Clients in de Vector stuurt. Wanneer de Server dan een nieuwe Client aanmaakt, geeft hij zichzelf mee. Hierdoor kan de Client de method in de Server aanroepen om een bericht naar alle Clients te sturen.

en een klein vraagje tussendoor, ik heb gelezen dat een vector uitgebreid kan worden. Is het stukje "= new Vector(AANTAL)" wel nodig? ik zag bij een voorbeeld dat het wel gebruikt werd namelijk.
Een Vector groeit automatisch. Met de verschillende constructoren kan je de begin status van de Vector bepalen en zijn "groeitempo".

Bij jouw aanroep maak een Vector aan die 10 elementen kan bevatten. Zou je een 11e element toevoegen, dan wordt je Vector met de standaardwaarde van 1 vergroot. Oftewel, elke keer als je iets aan je Vector toevoegt wat er niet inpast, wordt er voor dat ding een nieuw plekje in de Vector gemaakt. Zou je het zo doen:

Code:
Vector threads = new Vector(10, 5);

Dan wordt de Vector elke keer met 5 vergroot. Hierdoor wordt je Vector dus minder vaak vergroot.
 
Dit los ik over het algemeen op door in de Client thread een variabele te zetten die de Server voorstelt en in de Server een method toe te voegen die een bericht naar alle Clients in de Vector stuurt. Wanneer de Server dan een nieuwe Client aanmaakt, geeft hij zichzelf mee. Hierdoor kan de Client de method in de Server aanroepen om een bericht naar alle Clients te sturen.

Wat de vector en het wegschrijven betreft snap ik nu, dankje! :thumb:. Maar als ik een methode aanroep in de ChatServer, en zelf zit deze in die while lus vast, gaat dit dan wel lukken? En wat moet ik me voorstellen bij "een variabele te zetten die de server voorstelt"?

edit: ik ben nu bezig met met de methode in de ChatServer, heb tot nog toe dit:
Code:
public void sendText()
	{
		for(int i = 0; i<threads.size(); i++)
		{
			//hier moet hij dus de tekst sturen. moet dit via een methode in de thread? of heeft dit te maken met die "variabele die de server voorstelt"?
		}
	}

Het kan zijn dat dit basiskennis is, maar dan ben ik het allang weer vergeten :o :p
 
Laatst bewerkt:
Wat de vector en het wegschrijven betreft snap ik nu, dankje! :thumb:. Maar als ik een methode aanroep in de ChatServer, en zelf zit deze in die while lus vast, gaat dit dan wel lukken? En wat moet ik me voorstellen bij "een variabele te zetten die de server voorstelt"?

Ik zie nu wat het probleem hierbij is. In je ChatServer heb je alleen een main, geen instantie van je klasse ChatServer. Ikzelf zou van ChatServer ook een Thread maken, in de main een instantie van ChatServer maken en die vervolgens starten. In de run methode kan je vervolgens op nieuwe connecties checken. Omdat je dan ook daadwerkelijk een instantie van ChatServer hebt, kan je die meegeven aan de constructor van je ChatServerClient.

In ChatServerThread zet je iets zoals:
Code:
public class ChatServerThread extends Thread {
    private Socket socket = null;
    private ChatServer parent; 

    public ChatServerThread(Socket socket, ChatServer parent) {
	super("ChatServerThread");
	this.socket = socket;
	this.parent = parent;
    }

Je moet dan ook nog een method maken waarmee je een bericht door de socket heen stuurt. In je ChatServer maak je dan een method, bv met de naam "SendToClients", waarin je alle connecties in de Vector afgaat en de hier bovengenoemde method aanroept.

Als je dan in ChatServerThread iets binnenkrijgt, kan je de method in ChatServer aanroepen, waardoor het bericht naar alles wordt doorgestuurd.
 
dus zoiets?

Code:
public class ChatServer extends Thread
{
	public static void main(String[] args)
	{
		ChatServer a = new ChatServer();
		a.start();
	}
	
	public void run()
	{
		//luisteren naar verbindingen, + de aangemaakte threads in een vector plaatsen
	}
	
	public void ChatSendText(String msg)
	{
		//de tekst doorsturen
	}
	
}
 
Yeps, zoiets idd..
Ik zal vanavond eens mijn oude code door gaat spitten, ik heb ergens nog een chatprogramma liggen.
 
ok dankje ;) :thumb:

ben nu dus de blokken aan het vullen. De ChatServerThread is nu (Socket socket, ChatServer parent).

Wat moet ik hier dan mee?:
ChatServerThread b = new ChatServerThread(vSocket, ???);

en hoe krijg ik het bericht van de methode in de server naar de thread?
 
Ik ben alweer een stukje verder gekomen, ik heb nu dit:

Server:
Code:
import java.io.IOException;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Vector;

public class ChatServer extends Thread
{
	public static ServerSocket serverSocket = null;
	public static Socket vSocket = null;
	public static int AANTAL = 1;
	public static Vector <Thread> threads = new Vector(AANTAL, 1);
	public static ChatServer a = new ChatServer();
	
	
	public static void main(String[] args)
	{			
		System.out.println("Starting Server...");
		
		try {
            serverSocket = new ServerSocket(4444);
        } catch (IOException e) {
            System.err.println("Could not listen on port: 4444.");
            System.exit(-1);
        }
		
		a.start();
	}
	
	public void run()
	{
		try
		{
		vSocket = serverSocket.accept();				//hij wacht net zo lang tot er iemand verbindt.
		ChatServerThread b = new ChatServerThread(vSocket, a);
		b.start();
		threads.addElement(b);

                               [color=green] //b.sendBack("hoi");[/color]
		
		} catch(IOException e)
		{
			System.err.println("Foutje");
		}	
	}
	
	public void ChatSendText(String msg)
	{
		for(int i=0; i<threads.size(); i++)
		{
			[color=red]//(threads.elementAt(i)).sendBack(msg);[/color]
		}
	}
	
}

ChatServerThread:
Code:
import java.net.*;
import java.io.*;



public class ChatServerThread extends Thread {
    private Socket socket = null;
	private ChatServer parent; 

    public ChatServerThread(Socket socket, ChatServer parent) {
	super("ChatServerThread");
	this.socket = socket;
	this.parent = parent;
    }

    public void run() {

	try {
	    PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
	    BufferedReader in = new BufferedReader(
				    new InputStreamReader(
				    socket.getInputStream()));
		
		out.println("Verbonden, typ je tekst.");
		
		String inputLine;
		while ((inputLine = in.readLine()) != null)
		{
			//out.println(inputLine);
			System.out.println(inputLine);
			parent.ChatSendText(inputLine);
		}
		
	} catch (IOException e) {
	    System.err.println("Client heeft de verbinding verbroken");
	}
    }
	
	public void sendBack(String msg)
	{
		try {
		    PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
		    BufferedReader in = new BufferedReader(
					    new InputStreamReader(
					    socket.getInputStream()));
			
			out.println(msg);
	}catch(IOException e){
		
	}
		
	}
}

In de server heb ik 2 stukjes gemarkeerd, groen en rood. De groene werkt wel, de rode niet. Hoe komt dit?
 
Laatst bewerkt:
Ik heb in een andere code gekeken, en daar heb ik wat gevonden, en het werkt nu!

Dit zijn de codes:

ChatServer:
Code:
import java.io.IOException;
import java.net.ServerSocket;													//de benodigde imports
import java.net.Socket;
import java.util.Vector;
import javax.swing.*;
import java.awt.*;

public class ChatServer extends Thread
{
	public static ServerSocket serverSocket = null;								//De socket waar de clients verbindingen mee maken
	public static Socket vSocket = null;										//De socket waar de clients op doorgestuurd worden			
	public static Vector <Thread> threads = new Vector(1, 1);					//een vector aanmaken waar de threads in opgeslagen worden. De eerste 1 staat voor de grootte in het begin, de tweede 1 bepaalt de stapgrootte waarmee de vector uitgebreid wordt.
	public static Vector <String> names = new Vector(1, 1);						//een vector aanmaken waar de namen in opgeslagen worden.
	public static ChatServer a = new ChatServer();								//een instantie van ChatServer maken zodat de thread gestart kan worden
	public static String sOutput = "";
	public static TextArea veld = new TextArea("");
	
	
	public static void main(String[] args)
	{			
		JFrame frame = new JFrame("Server");
		
		frame.add(veld);
		frame.setSize(300,300);
		frame.setVisible(true);
		
		sOutput = sOutput + "Starting Server..." + "\n";
		veld.setText(sOutput);
		
		//System.out.println("Starting Server...");								
		
		try {
            serverSocket = new ServerSocket(8145);								//Proberen om de socket aan te maken
        } catch (IOException e) {
			sOutput = sOutput + "Could not listen on port: 4444." + "\n";
			veld.setText(sOutput);
            //System.err.println("Could not listen on port: 4444.");				//Als er een fout optreedt, dit aangeven en het programma sluiten
			try{
			sleep(10000);}catch (InterruptedException f){
				
			}
            System.exit(-1);
        }
		
		sOutput = sOutput + "Awaiting connections..." + "\n";
		veld.setText(sOutput);
		//System.out.println("Waiting for connections...");
		a.start();																//De thread starten
	}
	
	
	
	
	public void run()
	{
		while (true)															//Deze lus gaat oneindig door om te zorgen dat de clients kunnen verbinden
		{
		try
		{
		vSocket = serverSocket.accept();										//Accepteer verbindingen van clients, hij wacht net zo lang tot er iemand verbindt.
		ChatServerThread b = new ChatServerThread(vSocket, a);					//Een nieuwe thread aanmaken, de socket van de client doorsturen en de instantie van de chatserver doorsturen zodat methodes aangeroepen kunnen worden
		b.start();																//De ChatServerThread starten
		
		checkVectors();
		
		
		threads.addElement(b);													//De Thread toevoegen aan de vector
		//System.out.println("Nieuwe client verbonden.");
		
		sOutput = sOutput + "Nieuwe client verbonden." + "\n";
		veld.setText(sOutput);

		} catch(IOException e)
		{
			System.err.println("Foutje");										//Er kan een fout optreden, als het verbinding maken mislukt
		}	
		}
	}
	
	public void ChatSendText(String msg)										//De methode om de tekst naar alle threads te sturen
	{
		checkVectors();
		for(int i=0; i<threads.size(); i++)										
		{
			ChatServerThread thread = (ChatServerThread)threads.elementAt(i);	//Een nieuwe instantie van ChatServerThread aanmaken, met de thread die in de vector staat op plaats i
			thread.sendBack(msg);												//De methode sendBack in de thread aanroepen met de tekst die doorgestuurd moet worden
			//System.err.println(thread);
		}
		
		sOutput = sOutput + msg + "\n";
		veld.setText(sOutput);
	}
	
	public void NameVector(String name)											//De methode om de namen in de vector op te slaan, en door te sturen naar de threads
	{
		names.addElement(name);													//De naam in de vector opslaan
		
		for(int i=0; i<threads.size(); i++)
		{
			ChatServerThread thread = (ChatServerThread)threads.elementAt(i);	//Naar elke thread die bestaat de vector doorsturen
			thread.sendNames(names);
		}
		
	}
	
	public void checkVectors()
	{
		for(int i=0; i<threads.size(); i++)
		{
			if(!threads.elementAt(i).isAlive())
			{
				threads.removeElementAt(i);
				names.removeElementAt(i);
			}	
		}
	}
	
}

ChatServerThread
Code:
import java.net.*;
import java.io.*;
import java.util.Vector;


public class ChatServerThread extends Thread {
    private Socket socket = null;											//De socket aanmaken waarmee gepraat wordt met de client
	private ChatServer parent; 												//Een instantie van ChatServer maken zodat methodes aangeroepen kunnen worden

    public ChatServerThread(Socket socket, ChatServer parent) {
	super("ChatServerThread");
	this.socket = socket;
	this.parent = parent;
    }

    public void run() {			

	try {
	    PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
	    BufferedReader in = new BufferedReader(								//writers en readers aanmaken
				    new InputStreamReader(
				    socket.getInputStream()));
		
		out.println("Verbonden, typ je tekst.");
		
		String inputLine;
		while ((inputLine = in.readLine()) != null)
		{
			
			//Kijken aan de hand van de eerste karakter welke soort tekst doorgestuurd wordt.
			char type = inputLine.charAt(0);									//de eerste letter opslaan
			if(inputLine.charAt(0)== '1')										//dan is de tekst gewoon tekst, en moet het doorgestuurd worden.
			{
				parent.ChatSendText(inputLine);									//tekst versturen dmv de methode in ChatServer
			}
			
			if(inputLine.charAt(0)== '2')										//dan is de tekst de naam van de client, en moet dit opgeslagen worden in een vector.
			{
				String tmp = "";
				for(int i=1; i<inputLine.length(); i++)							
				{
					tmp = tmp + inputLine.charAt(i);							//een nieuwe string aanmaken met alle letters behalve de eerste zodat het nummer eruit gefilterd wordt.
				}
				
				parent.NameVector(tmp);											//De naam doorsturen zodat deze in de vector gezet kan worden, dmv de methode in de ChatServer
			}
			
		}
		
	} catch (IOException e) {
		
	    //System.err.println("Client heeft de verbinding verbroken");
	}
    }
	
	
	public void sendBack(String msg)											//De m
	{
		try {
		PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
	    BufferedReader in = new BufferedReader(
				    new InputStreamReader(
				    socket.getInputStream()));
		
		out.println(msg);
		}catch(IOException e){
		
		}
	}
	
	public void sendNames(Vector names)												//Dit moet nog even bekeken worden of het werkt, zo niet, dan in een lus alle namen doorsturen.
	{
		try {
			PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
		    BufferedReader in = new BufferedReader(
					    new InputStreamReader(
					    socket.getInputStream()));
			
			out.println(names);
			}catch(IOException e){
			
			}
	}
	
	}

Eerst werkte dit nog niet, maar toen ik de client had aangepast zodat deze met threads werkte, deed hij het perfect! :D
 
Ik weet niet of je er nog interesse in hebt, dit is ons (bijna) eindproduct.

Start eerst de server op, dan komt je intern ip tevoorschijn, die je bij de client invoert. Als je met computers wil werken buiten je netwerk, moet je dus je externe ip invoeren en een poort open zetten (4444).
 

Bijlagen

Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan