Hallo leute, dachte mir, ich wage mich mal langsamm an meine erste server - client anwendung, und da war das simpelste, was ich fand ein chat, der einfach nachrichten hin und her sendet.
hier meine server anwendugn:
Momentan soll nur das normale senden gehen
hier der client (noch nicht viel da, nur zu testzwecken)
Mein Problem: server scheint zwar was zu senden, aber client nimmt nix an, woran liegt das?
MfG darkeye
hier meine server anwendugn:
Java:
import java.io.*;
import java.net.*;
import java.util.ArrayList;
public class Server {
protected static final String MASTER = "ChatBot";
protected static final String SEP = ": ";
protected ServerSocket server;
protected ArrayList clients;
Server() {
clients = new ArrayList();
try{
server = new ServerSocket(5554);
} catch(IOException e){System.out.println("Fehler1: "+ e);}
}
public void runServer(){
try{
while(true){
Socket client = server.accept();
String hostName = client.getInetAddress().getHostName();
ChatHandler cl = new ChatHandler(client, hostName);
synchronized(clients){
clients.add(cl);
cl.start();
if(clients.size() == 1){
cl.send(MASTER, "Willkommen, du bist hier ganz allein^^!");
}
else{
cl.send(MASTER, "Willkommen, außer dir sind hier " + clients.size()+ " User online!");
}
}
}
} catch(IOException e){System.out.println("Fehler in der run: " + e);}
}
protected class ChatHandler extends Thread{
protected Socket clientSock;
protected BufferedReader is;
protected PrintWriter pw;
protected String clientIP;
protected String login;
public ChatHandler (Socket sock, String clnt) throws IOException {
clientSock = sock;
clientIP = clnt;
is = new BufferedReader(new InputStreamReader(sock.getInputStream()));
pw = new PrintWriter(sock.getOutputStream());
send(MASTER, "wir sind hier");
}
public void run(){
String line;
try{
while((line = is.readLine()) != null){
//Testblock
String check = line.substring(0,6);
if(check == "CMD_Li"){
line = line.replace("CMD_Li", "");
login = line;
broadcast(MASTER, login + " hat sich eingelogt!");
}
if(check == "CMD_MG"){
line = line.replace("CMD_MG", "");
if (login == null){
send(MASTER, " Bitte zuerst einloggen");
}
else{
String recip = line.substring(0, 15);
String mesg = line.substring(16);
ChatHandler cl = lookup(recip);
if(cl == null)
psend(MASTER, recip + " nicht eingeloggt.");
else
cl.psend(login, mesg);
}
}
if(check == "CMD_QT"){
broadcast(MASTER, "Bis Bald" + login + "@" + clientIP);
close();
}
if(check == "CMD_BC"){
if(login != null)
broadcast(login, line);
}
if(check != "CMD_BC" && check != "CMD_QT" && check !="CMD_Li" && check != "CMD_MG"){
broadcast(MASTER, "Unbekannter Befehl von: " + login + "@" + clientIP);
}
//ende Testblock __________________
}
} catch(IOException e){broadcast(MASTER, "Server hat unbehandeltes Problem festgestellt!! (59)");}
finally {
synchronized(clients){
clients.remove(this);
if (clients.size() == 1){
ChatHandler last = (ChatHandler)clients.get(0);
last.send(MASTER, "Du bist schon wieder alleine, mach dir nix drauß, ich bin auch noch da :)");
}
}
}
}
protected void close(){
if(clientSock == null){
return;
}
try{
clientSock.close();
clientSock = null;
}catch(IOException e){System.out.println("Fehler beim schließen des Servers " + e);}
}
public void send(String sender, String mesg){
System.out.println("gesendet!");
pw.println(sender + SEP + mesg);
}
protected void psend(String sender, String msg){
send("<* " + sender + " *>", msg);
}
public void broadcast(String sender, String mesg){
for ( int i=0; i<clients.size(); i++){
ChatHandler sib = (ChatHandler)clients.get(i);
sib.send(sender, mesg);
}
}
protected ChatHandler lookup(String nick){
synchronized(clients){
for (int i = 0; i<clients.size(); i++){
ChatHandler cl = (ChatHandler)clients.get(i);
if(cl.login.equals(nick));
return cl;
}
}
return null;
}
public String toString(){
return "ChatHandler[" + login + "]";
}
}
public static void main(String[] args){
Server w = new Server();
w.runServer();
}
Momentan soll nur das normale senden gehen
hier der client (noch nicht viel da, nur zu testzwecken)
Java:
import java.io.*;
import java.net.*;
public class Client {
BufferedReader br;
BufferedWriter bw;
Client() throws IOException {
try{
//Socket für Verbindung zu Server erstellen
Socket server = new Socket ("localhost", 5554);
System.out.println("Mit Server verbunden: "+server.getInetAddress());
InputStream input = server.getInputStream();
br = new BufferedReader(new InputStreamReader(input));
OutputStream out = server.getOutputStream();
bw = new BufferedWriter(new OutputStreamWriter(out));
bw.write("CMD_BChallo");
}
catch(IOException error){
System.out.println("Fehler*1*: "+error);
}
new Thread(new Runnable(){
public void run(){
String s;
try{
while ((s = br.readLine())!= null){
System.out.println("ist da");
System.out.println(s + "\n");
return;
}
}catch(IOException e){System.out.println("Fehler: " + e);}
}
}).start();
}
public static void main(String[] args) throws IOException{
Client client = new Client();
}
}
Mein Problem: server scheint zwar was zu senden, aber client nimmt nix an, woran liegt das?
MfG darkeye