Ich schreibe ein Chat-Programm in Java. Ich kann anscheinend keine Nachrichten senden können. Meine ClientConnectionHandler
behandelt eine Instanz von jedem Clientkann keine Nachrichten im Chat-Programm senden
import java.io.*;
import java.net.*;
import java.text.*;
import java.util.*;
public class ClientConnectionHandler extends Thread {
private Socket socket;
String username;
private UUID id; //= UUID.randomUUID();
BufferedReader reader;
PrintWriter writer;
private final HashMap<UUID, ClientConnectionHandler> clients = new HashMap<>();
volatile boolean messageLoop = true;
ServerGUI serverGUI;
public ClientConnectionHandler(Socket socket){
this.socket = socket;
try{
this.socket.setSoTimeout(1000);
}
catch (SocketException e) {
System.out.println(e);
}
try {
reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
writer = new PrintWriter(new OutputStreamWriter(socket.getOutputStream()));
}
catch (Exception e){
e.printStackTrace();
}
}
public void run(){
if (socket != null && reader != null) {
addToClients();
try {
String messageInput;
while (messageLoop){
try{
messageInput = reader.readLine();
sendMessage(messageInput);
}
catch(SocketTimeoutException ste){
//Thread.yield();
}
}
}
catch (IOException e){
e.printStackTrace();
}
finally {
removeFromClients();
try {
reader.close();
writer.close();
}
catch (IOException e) {
e.printStackTrace();
}
}
}
else {
System.out.println("Socket connection and BufferedReader are closed");
}
}
private void sendMessage(String msg){
for (ClientConnectionHandler cchandler : clients.values()){
try {
//if (!clientconn.id.equals(this.id)) {
cchandler.writer.write(msg+"\n");
cchandler.writer.flush();
//}
}
catch (Exception e){
System.err.println("Unable to write to client");
clients.remove(cchandler.id);
}
}
}
}
Hier ist meine Client
Klasse
public class Client {
private Socket clientSocket;
private String username;
private static int port = 7777;
BufferedReader inReader;
PrintWriter outWriter;
private SimpleDateFormat sdf;
ClientGUI clientGUI;
ServerGUI serverGUI;
private Login login;
public Client(String username, int port){
this.username = username;
this.port = port;
sdf = new SimpleDateFormat("dd.MM.yyyy 'at' hh:mm:ss a");
}
/**
* Connects the client to the Server
*/
public void connectClient(){
try{
clientSocket = new Socket("127.0.0.1", port);
Thread thread = new Thread(new ClientConnectionHandler(clientSocket));
thread.start();
String connected = sdf.format(new Date())+"\n"+username+" just connected \n";
System.out.println(connected);
}
catch(Exception e){
System.out.println(sdf.format(new Date())+"\n"+username+" did not connect to server "+e+"\n");
}
}
/**
* Disconnects the Client from the Server
*/
void disconnectClient(){
try{
clientSocket.close();
System.out.println(username+" disconnected \n");
}
catch(Exception e){
System.out.println(username+" failed to disconnect \n");
}
}
//send message to the server
public void sendMessage() throws IOException{
try{
inReader = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
outWriter = new PrintWriter(new OutputStreamWriter(clientSocket.getOutputStream()));
}
catch(IOException ioe){
}
//infinite loop to check for messages
try{
String response;
String inputMsg = inReader.readLine();
outWriter.println(inputMsg);
while((response = inReader.readLine()) != null){
System.out.println(response);
outWriter.println(inputMsg);
}
inReader.close();
outWriter.close();
//clientGUI.appendMessage(inputMsg);
}
catch(IOException ioe){
}
}
void appendToCG(String str){
clientGUI.appendMessage(str);
}
public static void main(String[] args) {
Client client = new Client("127.0.0.1",port);
}
}
EDIT
startServerConnection()
Methode in meiner Server
Klasse:
public void startServerConnection()
{
try {
serverSocket = new ServerSocket(portNumber);
while(connection){
System.out.println("Waiting for a client...");
Socket clientSocket = serverSocket.accept();
System.out.println("Server connection established on port: "+clientSocket.getLocalPort());
ClientConnectionHandler clientConnection = new ClientConnectionHandler(clientSocket);
Thread thread = new Thread(clientConnection);
thread.start();
}
}
catch (Exception e) {
// System.out.println(sdf.format(new
// Date())+": Server didn't connect"); //append to eventsLog
e.printStackTrace();
return;
}
}
Ich bin mir ziemlich sicher, dass ich alle erforderlichen Leser und Schreiber erstellt habe, sowohl auf der ClientConnectionHandler
(für jeden Benutzer eine Nachricht senden) und Client
, Nachrichten zu lesen. Verpasse ich etwas?
ich hier überall um keinen 'ServerSocket' sehen ... – 3kings
@ 3Kings posted ich einen Teil meiner 'Server' Klasse Irgendwelche Ideen? – Guest1235
Bitte vandalisiere deine Posts nicht. Klicken Sie bitte auf Löschen, um den Beitrag zu löschen, wenn Sie ihn löschen möchten. –