niekfct
Terugkerende gebruiker
- Lid geworden
- 19 jul 2006
- Berichten
- 1.563
Ik probeer voor school een chatprogramma te maken, en ik heb nu dit:
De server is een thread die luisterd naar verbindingen van clients. Als er een client verbind maakt de server een thread aan voor die client. Deze thread slaat hij op in een vector. In de server klasse staat ook een methode die door de threads aan geroepen kan worden om de tekst door te sturen. Nu wil ik met deze methode een methode in alle threads aanroepen, maar ik krijg dit niet voor elkaar. Dit is de code voor de server kant:
Server:
ChatServerThread:
In de server heb ik 2 stukjes gemarkeerd, groen en rood. De groene werkt wel, de rode niet. Hoe komt dit? Of moet ik het anders doen?
De server is een thread die luisterd naar verbindingen van clients. Als er een client verbind maakt de server een thread aan voor die client. Deze thread slaat hij op in een vector. In de server klasse staat ook een methode die door de threads aan geroepen kan worden om de tekst door te sturen. Nu wil ik met deze methode een methode in alle threads aanroepen, maar ik krijg dit niet voor elkaar. Dit is de code voor de server kant:
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)
{
//versturen van de tekst terug naar de clients
}
}
}
In de server heb ik 2 stukjes gemarkeerd, groen en rood. De groene werkt wel, de rode niet. Hoe komt dit? Of moet ik het anders doen?