Socket Doppel Login geht nicht

JayWorkDe

Mitglied
Hallo liebes Forum,

Ich habe einen Chat programmiert indem es möglich sein sollte sich mehrmals über die selbe IP anzumelden... Wenn ich mich jedoch mit der selben IP ein 2tes mal anmelde dann öffnet sich wie es sein sollte auch ein 2tes Chatframe... Jedoch wird dann nur noch alles doppelt im 2ten Chatframe angezeigt... Sowohl die Eingaben des 1. als auch des 2. Clients.

Ich denke hier den Code zu posten wird etwas lang...

Mein Chat besteht aus: 58 Dateien.. Client.java hat 1336 Zeilen und Server.java hat 8552 Zeilen...

Ansonsten hab ich ein jar archiv für den Server und eins für den Client mit cache auf auf den Client (falls das Relevant ist).

Habt ihr evtl. so auf die schnelle eine Idee was ich ausprobieren könnte?

Mfg Jay
 

JayWorkDe

Mitglied
Ich arbeite mit TCP...

hmm und was genau soll ich nun mit dem Debugger?... Ich abreite noch nicht sehr lange mit Eclipse...

Ich poste einfachmal alles was mit dem Login und dem senden an andere Chatter zu tun hat.

Client.java

Java:
public void init() 
    {
   	    port = 5000;
   		
   		//port = Integer.parseInt(getParameter("port"));
    		
    	setBackground(Color.WHITE);
    	//setBackground(new Color(29,171,209));
    	
    	try
    	{
    		chatlog = new Chatlog();
    		imges = new Images();
    	}catch (Exception e) 
    	{
    		e.toString();
    	}
    	
    	setSize(300,200);
    	
		chattitle = "Chatserver";
	
		try
		{
			chatframe = new Client_frame(this, getCodeBase());
			WindowAdapterImpl windowlistener = new WindowAdapterImpl();
			windowlistener.client = this;
			chatframe.addWindowListener(windowlistener);
		}catch (Exception e) 
		{
			e.toString();
		}
		
		ActionListener loginlistener = new ActionListener() 
		{		    
		    public void actionPerformed(ActionEvent evt)
		    {
		    	if(tpasswort.getText().equals(""))
		    	{
		    		JOptionPane.showMessageDialog(null, "Geben Sie bitte Ihr Passwort ein!", "Fehler", JOptionPane.ERROR_MESSAGE);
		    	}else{
		    		try 
		    		{
		    			writer.writeUTF("login:" + tNick.getText() + "|"+ tpasswort.getText()+"|"+channel.getSelectedItem());
		    		}
		    		catch (IOException e) {}
		    		catch (NullPointerException e) {}
		    	}
		    }
		};
		
		setLayout(new GridBagLayout());
		
		nick.setFont(new Font("Arial", Font.BOLD, 15));
		chanel.setFont(new Font("Arial", Font.BOLD, 15));
		passwort.setFont(new Font("Arial", Font.BOLD, 15));
		
		
		channel.setMinimumSize(new Dimension(224,20));
		channel.setPreferredSize(new Dimension(224,20));
		
		channel.setBackground(Color.WHITE);
		
		
		add(nick);
		c.gridwidth = GridBagConstraints.REMAINDER;
		add(tNick, c);
		
		add(new JLabel(" "));
		c.gridwidth = GridBagConstraints.REMAINDER;
		add(new JLabel(" "), c);
		
		add(passwort);
		c.gridwidth = GridBagConstraints.REMAINDER;
		add(tpasswort, c);
		
		add(new JLabel(" "));
		c.gridwidth = GridBagConstraints.REMAINDER;
		add(new JLabel( ""), c);
		
		add(chanel);
		c.gridwidth = GridBagConstraints.REMAINDER;
		add(channel, c);
		
		add(new JLabel(" "));
		c.gridwidth = GridBagConstraints.REMAINDER;
		add(new JLabel(" "), c);
		
		c.gridwidth = GridBagConstraints.CENTER;
		add(login, c);
		
    	login.addActionListener(loginlistener);
    	
		try 
		{
			client = new Socket(getParameter("serverip"), port);
			
	  		writer = new DataOutputStream(client.getOutputStream());
	  		reader = new DataInputStream(client.getInputStream());
	  		
	  		
	  		writer.writeUTF("takeChannel:Alle");
	  		tNick.setText(getParameter("nick"));
	  		//tNick.setEnabled(false);
		}
		catch (IOException e) 
		{
			channel.addItem("Server in Wartung");
			
			tNick.setEnabled(false);
			tpasswort.setEnabled(false);
			login.setEnabled(false);
		}
		new Thread(this).start();
	}

public void run() 
    {	
    	while (true) 
    	{
    		try 
    		{
    			String query = reader.readUTF();
    			
    			String type = query.substring(0, query.indexOf(":"));
    			String msg = query.substring(query.indexOf(":") + 1);
                }
        }
    }


WindowAdapterImpl.java

Java:
public class WindowAdapterImpl extends WindowAdapter 
{
    public Client client;

    public WindowAdapterImpl()
    {
    }
    
    public void windowClosing(WindowEvent e) 
    {
    	client.restart();
    	super.windowClosed(e);
    }
}
[/Java]

Clientframe.java

[code=Java]
    protected void addMessage(String message)
    {	
    	doc.add(message);
    	
    	chat.setCaretPosition(chat.getDocument().getLength());
    	
    	doc.next = 0;
    }


public Client_frame(Client clt, URL codeBase) 
    {   
    	setSize(800, 600);
    	
    	client = clt;
    	
    	ActionListener chatlistener = new ActionListener() 
    	{
    	    public void actionPerformed(ActionEvent evt) 
    	    {
    		try 
    		{
                        client.writer.writeUTF("send:" + message.getText()); 
                }
    		catch (IOException e) {}
    		catch (NullPointerException e) {}
    	    }
    	};
}
 

JayWorkDe

Mitglied
Server.java

Java:
public Hashtable<Socket, DataOutputStream> outputStreams = new Hashtable<Socket, DataOutputStream>();
public Hashtable<Socket, String> loggedUsers = new Hashtable<Socket, String>();
public Hashtable<Socket, String> userChanel = new Hashtable<Socket, String>();

private Vector vChanels = null;

while(true) 
		{
			try 
			{
				Socket client = server.accept();
				
				System.out.println("[" + getTimeString() + "] Connection from " + client + " added");
				
				DataOutputStream out = new DataOutputStream(client.getOutputStream());

				outputStreams.put(client, out);
				
				new ServerThread(this, client);
				
				if(db.getButtler())
				{
					sendToUser(client, "butlername:"+db.getButtlerName());
                                }
				
			} catch (IOException e) {}
		}

private void login(Socket client, String message) 
	{
		String nick = message.substring(0, message.indexOf("|"));
		String tmp = message.substring(message.indexOf("|") + 1);
		String password = tmp.substring(0, tmp.indexOf("|"));
		String chanelStr = tmp.substring(tmp.indexOf("|") + 1);

		boolean ip = true;
		
		synchronized (loggedUsers) 
		{
			Enumeration<Socket> keys = loggedUsers.keys();
			while (keys.hasMoreElements()) 
			{
				Socket key = keys.nextElement();
				
				if (getIP(key).equals(getIP(client)))
				{
					ip = false;
				}
			}
		}
		
		if(loggedUsers.size() == db.getMaxChatter() && db.getMaxChatter() != 0)
		{
			sendToUser(client, "server:maxchatter");
		}else{
			
		if(!ip && !db.getDoubleLogin())
		{
			sendToUser(client, "server:ip");
		}else{
		
		if (db.userLogin(nick, password, getTimestamp())) 
		{
			int lastLogin = getTimestamp() - db.getLastmessage(nick);

			nick = db.getNick(nick);

			System.out.println("[" + getTimeString() + "] Login from " + client + " with nick \"" + nick + "\" and password \"" + password + "\" granted");

			String name = "";
			String thema = "";
			int buttler = 0;
			int welcome = 0;
			int greeting = 0;
			String wColor = "";
			
			String pw = "";

			try 
			{
				Socket nick2kick = null;

				if(getClientWithNick(nick) != client) // Equals für Doppelchannel
				{
					nick2kick = getClientWithNick(nick);
				}else{
					nick2kick = null;
				}

				if (chanelStr.equals("")) 
				{
					if (db.getUserLevel(nick) >= 3) 
					{
						chanelStr = "Admin";
						if (db.userAllowed(nick, "hide") && !db.isHide(nick) && getUserLevel(client) >= commandlevels.get("hide")) 
						{
							db.updateHide(nick, 1);
						}
					}else{
						chanelStr = "Knutschecke";
					}
				}

				if (db.isJail(nick) >= 1) 
				{
					chanelStr = "Jail";
					if (!db.isTimeout(nick)) 
					{
						db.updateTimeout(nick, 1);
					}
				}

				ResultSet result = db.channelIn(chanelStr);

				while (result.next()) 
				{
					name = result.getString("name");

					int mindeststatus = result.getInt("mindeststatus");
					int maxchatter = result.getInt("maxchatter");

					thema = result.getString("thema");

					buttler = result.getInt("buttler");
					welcome = result.getInt("welcome");
					greeting = result.getInt("greeting");
					
					wColor = result.getString("farbe_come");

					pw = result.getString("passwort");
					
					int channelMax = 0;
					int channelIn = 0;
					int channelMin = 0;
					
					
					if(db.getUserLevel(nick) >= mindeststatus || chanelStr.equals("Jail"))
					{
						for (int i = 0; i < vChanels.size(); i++) 
						{
							Chanel chanel = (Chanel) vChanels.get(i);
							
							if (chanel.getName().equals(name)) 
							{
								channelMax = chanel.getMaxChatter();
								channelIn = chanel.getUsersLogedIn();
								channelMin = chanel.getMindesStatus();
							}
						}
						
						boolean isPw = true;
						
						if(Integer.parseInt(db.getUserItem(nick, "age")) != 0 && !db.getUserItem(nick, "sex").equals(""))
						{
							if (channelIn < channelMax || db.getUserLevel(nick) >= 2 || chanelStr.equals("Jail")) 
							{
								if (!db.isBanned(nick)) 
								{
									if (!db.isLocked(nick, getTimestamp()) && !db.isPermaLocked(nick,getTimestamp())) 
									{
										if(!pw.equals(""))
										{
											if(db.getUserLevel(nick) <= 1)
											{
												String eingabe = JOptionPane.showInputDialog(null,"Geben Sie das Passwort für diesen Chanel ein.","Passwortschutz",JOptionPane.PLAIN_MESSAGE);
											
												if(!eingabe.equals(pw))
												{
													isPw = false;
												}
											}else{
												isPw = true;
											}
										}
										
										if(isPw)
										{
											if (db.isTestmodus() && db.getUserLevel(nick) <= 2) 
											{
												sendToUser(client, "server:isTested");
											}else{
												if(nick2kick != null) 
												{
													sendToUser(nick2kick, "server:doubleLogin");
													removeConnection(nick2kick);
												}
											
												if(loggedUsers.contains(nick))
												{
													sendToUser(client, "server:isLoggedIn");
												}else{													
													for (int i = 0; i < vChanels.size(); i++) 
													{
														Chanel chanel = (Chanel) vChanels.get(i);
														if (chanel.getName().equals(name)) 
														{	
															chanel.setUsersLogedIn(chanel.usersLogedIn + 1);	
														}
													}
												
													userChanel.put(client, name);
												
													loggedUsers.put(client, nick);
																
													sendToUser(client, "server:setChatframeOver:"+db.getSettingsOver()+"<-->"+db.getSettingsOverMessage());

													synchronized (outputStreams) 
													{
														if (outputStreams.get(client) == null) 
														{
															try 
															{
																DataOutputStream out = new DataOutputStream(client.getOutputStream());
																outputStreams.put(client,out);
															} 
															catch (IOException e) {}
														}
									
														sendToUser(client, "colorsFont:"+db.getColors(userChanel.get(client)));
											
														sendToUser(client, "server:setUserLevel:"+getUserLevel(client));

														DataOutputStream out = outputStreams.get(client);

														String c_Path = db.getChannelItem(userChanel.get(client),"pic");

														if (c_Path.equals("")) 
														{
															c_Path = "default.jpg";
														}

														sendToUser(client, "setChannelBackgroudPic:" +db.getURL()+"images/background/<-->"+ c_Path);
												
														sendToUser(client, "setChannelColors:"+ db.getChannelItem(userChanel.get(client),"schriftgroesse")+ "<-->"+ db.getChannelItem(userChanel.get(client),"schriftfarbe")+ "<-->"+ db.getChannelItem(userChanel.get(client),"p_schriftfarbe")+ "<-->"+ db.getChannelItem(userChanel.get(client),"privat_schriftfarbe")+ "<-->"+ db.getChannelItem(userChanel.get(client),"min_schriftgroesse")+ "<-->"+ db.getChannelItem(userChanel.get(client),"max_schriftgroesse"));
													
														sendToUser(client, "server:updateUserlist:"+nick+"<-->"+db.getUserItem(nick, "sex")+"<-->"+Integer.parseInt(db.getUserItem(nick, "age")));
														
														String params = db.userChatfenster(nick);
												
														int datumUndUhrzeit = Integer.parseInt(params.substring(0, params.indexOf("<-->")));
														params = params.substring(params.indexOf("<-->") + 4);
														int userlist = Integer.parseInt(params.substring(0, params.indexOf("<-->")));
														params = params.substring(params.indexOf("<-->") + 4);
														int toolbar = Integer.parseInt(params);
													
														sendToUser(client, "server:timestring:"+datumUndUhrzeit);
														sendToUser(client, "server:userlist:"+userlist);
														sendToUser(client, "server:toolbar:"+toolbar);
													
														try 
														{
															out.writeUTF("status:login granted:"+ nick);
															sendToUser(client,"status:login granted:"+ nick);
															Enumeration<Socket> keys = loggedUsers.keys();
															while (keys.hasMoreElements()) 
															{
																Socket key = keys.nextElement();
																String chanelTmp = userChanel.get(key);
																String nickTmp = loggedUsers.get(key);
																if (key != client) 
																{
																	if (chanelTmp != null) 
																	{
																		if (chanelTmp.equals(chanelStr)) 
																		{
																			out.writeUTF("join:"+ loggedUsers.get(key)+ ":"+ db.getUserLevel(nickTmp)+":"+db.getUserItem(loggedUsers.get(key), "age")+":"+db.getUserItem(loggedUsers.get(key), "sex"));
																		}
																	}
																}
															}
														} catch (IOException e) {}

														db.addLoginIp(nick, getIP(client));

														String official = db.getChannelItem(name, "public");
													
														String chattitel = db.getChattitel();
														
														if (official.equals("0")) 
														{
															sendToUser(client, "server:setTitle:"+chattitel+": Nick " + nick + " || Channel " + name + " (Privat)");
														}else{
															sendToUser(client, "server:setTitle:"+chattitel+": Nick " + nick + " || Channel " + name);
														}
													
														if (!thema.equals("")) 
														{
															if (db.getButtler()) 
															{
																sendToUser(client, "message:[b]Thema dieses Channels:[/b] " + thema+"\n");
															}else{
																sendToUser(client, "message:[b]Thema dieses Channels:[/b] " + thema+"\n");
															}
														}
												
														if (db.isMuted(nick)) 
														{
															sendToUser(client, "server:finalmute");
														}
		
														if (!db.isHide(loggedUsers.get(client))) 
														{
															sendToChannelIn("join:" + nick + ":" + db.getUserLevel(nick)+":"+Integer.parseInt(db.getUserItem(nick, "age"))+":"+db.getUserItem(nick, "sex"), client);

															if (welcome == 1) 
															{
																if (db.isButtler(userChanel.get(client))) 
																{
																	if (db.getButtler())
																	{
																		//sendToChannelIn("message:"+wColor+ db.getButtlerName() + ": " + nick + " hat den Raum betreten", client);
																		butlerSend(wColor+nick + " hat den Raum betreten.", userChanel.get(client));
																	}else{
																		//sendToChannelIn("message:"+wColor+ db.getProjektname() + ": " + nick + " hat den Raum betreten", client);
																		butlerSend(wColor+nick + " hat den Raum betreten.", userChanel.get(client));
																	}
																}
															}
															if (greeting == 1) 
															{
																if (db.isButtler(userChanel.get(client))) 
																{
																	Random rand = new Random();
																	int grtIndex = Math.abs(rand.nextInt()) % buttler_greetings.size();
																	String greetings = buttler_greetings.get(grtIndex).replaceAll("%NICK%",nick);

																	if (db.getButtler()) 
																	{
																		//sendToChannelIn("message:"+ db.getButtlerName()+ ": "+ greetings,client);
																		butlerSend(greetings, userChanel.get(client));
																	}else{
																		//sendToChannelIn("message:"+ db.getProjektname()+ ": "+ greetings,client);
																		butlerSend(greetings, userChanel.get(client));
																	}
																}
															}
														} else {
															sendToChannelIn("join:" + nick + ":" + db.getUserLevel(nick)+":"+Integer.parseInt(db.getUserItem(nick, "age"))+":"+db.getUserItem(nick, "sex"), client);

															sendToChannelIn("hide:" + loggedUsers.get(client)+":"+db.getUserItem(loggedUsers.get(client), "age")+":"+db.getUserItem(loggedUsers.get(client), "sex")+":"+getUserLevel(client),client);
															sendToUser(client,"privatein:Sie befinden sich im /hide");
														}
													
														db.updateUserLoggedIn(nick, 1);
		
														Enumeration<Socket> keys = userChanel.keys();
														while (keys.hasMoreElements()) 
														{
															Socket key = keys.nextElement();
															if (db.isHide(loggedUsers.get(key))) 
															{
																sendToChannelIn("hide:" + loggedUsers.get(key)+":"+db.getUserItem(loggedUsers.get(key),"age")+":"+db.getUserItem(loggedUsers.get(key), "sex")+":"+getUserLevel(key),client);
															}
																		
    														if (!db.isButtler(userChanel.get(client))) 
															{
																sendToUser(client, "server:butlerG:"+ db.getButtlerName());
															}
														}

														if (db.userBrief(loggedUsers.get(client)) == 1) 
														{
															sendToUser(client,"privatein:Es befindet sich ein Brief in Ihrem Briefkasten.");
														} else if (db.userBrief(loggedUsers.get(client)) >= 1) 
														{
															sendToUser(client,"privatein:Es befinden sich Briefe in Ihrem Briefkasten.");
														}
		
														if (db.isTrouble(loggedUsers.get(client))) 
														{
															sendToUser(client,"privatein:Sie können derzeit nicht angeschrieben werden.");
														}

														if (db.isJail(nick) >= 1) 
														{
															channelChange(client, "jail");
															sendToUser(client, "server:jail:"+ db.isJailReason(nick)+ "<-->" + db.isJail(nick));
														}

														db.updateAnwesenheit(nick, 1);
														
											
														sendToUser(client, "sm:01<-->0");
														sendToUser(client, "sm:02<-->0");
														sendToUser(client, "sm:03<-->0");
														sendToUser(client, "sm:04<-->0");
														sendToUser(client, "sm:05<-->0");
														sendToUser(client, "sm:06<-->0");
														sendToUser(client, "sm:07<-->0");
														
												  
														if(db.getSmiley(nick, "#:-)"))
														{
															sendToUser(client, "sm:01<-->1");
														}
														
														if(getUserLevel(client) >= 4) 
														{
    														sendToUser(client, "sm:01<-->1");
															sendToUser(client, "sm:02<-->1");
															sendToUser(client, "sm:03<-->1");
															sendToUser(client, "sm:04<-->1");
															sendToUser(client, "sm:05<-->1");
															sendToUser(client, "sm:06<-->1");
															sendToUser(client, "sm:07<-->1"); 
														  
														}		
														
														if(db.isLoginMessage(loggedUsers.get(client)) && !db.isHide(loggedUsers.get(client)) && db.isUserUpgrade(loggedUsers.get(client)))
														{
															sendToChannelIn("send:"+db.getUserItem(loggedUsers.get(client),"loginmessage"), client);
														}
													}
												}
												//}else{
												//   sendToUser(client, "server:doubleLogin");
												//}
											}
										}else{
											sendToUser(client, "server:pwfalse");
										}
									} else {
										sendToUser(client, "server:isLocked");
									}
								} else {
									sendToUser(client, "server:isBanned");
								}
							} else {
								sendToUser(client, "server:channelfull");
							}
						}else{
							sendToUser(client, "server:setSexAlter:"+nick+"<-->"+Integer.parseInt(db.getUserItem(nick, "age"))+"<-->"+db.getUserItem(nick, "sex"));
						}
					} else {
						sendToUser(client, "server:channeldenied");
					}
				}
			} catch (SQLException e) {
				System.out.println(e.toString());
			}
			// }
			// }
		} else {
			sendToUser(client, "status:accessdenied:" + nick);
		}
		}
		}
	}
 
Zuletzt bearbeitet:

JayWorkDe

Mitglied
Server Teil2

Java:
private void takeChannel(String kategroie, Socket client)
	{
		String chanels = "cannels:";
		
		for (int i = 0; i < vChanels.size(); i++) 
		{
			Chanel chanel = (Chanel) vChanels.get(i);
			
			if(chanel.official)
			{
                              chanels = chanels + chanel.getName()+"<-->";
                        }
                }
         }

public void sendToChannelIn(String query, Socket client) 
	{
String type;
		String message;

		if (query.length() < 0)
			return;

		try {
			type = query.substring(0, query.indexOf(":"));
			message = query.substring(query.indexOf(":") + 1);
		} catch (StringIndexOutOfBoundsException e) {
			return;
		}

		if (type.length() < 0 || message.length() < 0)
			return;

		try 
		{
			while (message.substring(0, 1).equals(" ")) 
			{
				message = message.substring(1);
			}
		} catch (StringIndexOutOfBoundsException e) 
		{
			return;
		}
                
                if (type.equals("send")) 
		{
			String command = "";
			String params = "";
			if (message.indexOf(" ") != -1) 
			{
				command = message.substring(0, message.indexOf(" ")).toLowerCase();
				params = message.substring(message.indexOf(" ") + 1);
			}else
				command = message.toLowerCase();
			if (command.length() < 0) 
			{
				return;
			}

			for (int a = 0; a < vChanels.size(); a++) 
			{
				Chanel chanel = (Chanel) vChanels.get(a);
				if (chanel.getName().equals(userChanel.get(client))) 
				{
if (commands.containsKey(command)) 
					{
						if(!chanel.quiet)
						{
							if (!db.isMuted(loggedUsers.get(client))) 
							{
								if (!db.isHide(loggedUsers.get(client))) 
								{
									if (!db.isChannelMuted(loggedUsers.get(client), userChanel.get(client))) 
									{
										System.out.println("[" + getTimeString() + "] Command \"" + command + "\" (Parameters \"" + params + "\") from " + client + " (" + loggedUsers.get(client) + ")");

										String[] commandMessages = commands.get(command).split("\\|");

										Random rand = new Random();
										int cmdIndex = Math.abs(rand.nextInt()) % commandMessages.length;

										String commandMessage = commandMessages[cmdIndex].replaceAll("%NICK1%", loggedUsers.get(client));
										commandMessage = commandMessage.replaceAll("%NICK2%", params);

										synchronized (outputStreams) 
										{
											Enumeration<Socket> keys = outputStreams.keys();
											while (keys.hasMoreElements()) 
											{
												Socket key = keys.nextElement();
												DataOutputStream out = outputStreams.get(key);

												if (loggedUsers.get(key) != null) 
												{
													try 
													{
														if(userChanel.get(client) == userChanel.get(key))
														{
															out.writeUTF("message:"+ commandMessage);
														}
													} catch (IOException e) {}
												}
											}
										}
									}else{
										if (db.getButtler()) 
										{
											sendToUser(client, "privatein:" + db.getButtlerName() + ":Sie sind gemutet.");
										}else{
											sendToUser(client, "privatein:" + db.getProjektname() + ":Sie sind gemutet.");
										}
									}
								}else{
									sendToUser(client,"privatein:Sie können während dem /hide keine öffentlichen Nachrichten schreiben.");
								}
							}else{
								if (db.getButtler()) 
								{
									sendToUser(client, "privatein:" + db.getButtlerName() + ":Sie sind gemutet.");
								} else {
									sendToUser(client, "privatein:" + db.getProjektname() + ":Sie sind gemutet.");
								}
							}
						}else{
							sendToUser(client, "privatein:Es kann hier nicht öffentlich geschrieben werden.");
						}
					} else if (command.substring(0, 1).equals("/")) 
					{
						if (db.getButtler()) 
						{
							sendToUser(client, "privatein:" + db.getButtlerName() + ":Diese Funktion existiert nicht.");
						}else{
							sendToUser(client, "privatein:" + db.getProjektname() + ":Diese Funktion existiert nicht.");
						}
					
					}else{
						if(!chanel.quiet)
						{
							if (!db.isMuted(loggedUsers.get(client))) 
							{
								if (!db.isHide(loggedUsers.get(client))) 
								{
									if (!db.isChannelMuted(loggedUsers.get(client),userChanel.get(client))) 
									{
										String strChanel = "";
										if(client != null) 
										{
											strChanel = userChanel.get(client);
										}
								
										if(userChanel.get(client).equals("Quiz") && !quizGamer.containsValue(loggedUsers.get(client)))
										{
											sendToUser(client, "privatein:Da wir gerade spielen, können Sie nichts schreiben.");
										}else{
											synchronized (loggedUsers)//(outputStreams) 
											{
												Enumeration<Socket> keys = loggedUsers.keys(); //outputStreams.keys();
												while (keys.hasMoreElements()) 
												{
													Socket key = keys.nextElement();
													DataOutputStream out = outputStreams.get(key);
													try 
													{
														if(client == null && userChanel.get(key) == null && loggedUsers.get(key) == null)
														{	
															//sendToChannelIn("message:" + message, client);	
															out.writeUTF(message);
														
														}else{
															if (db.isKi(loggedUsers.get(client)) && userChanel.get(client).equals(db.getButtlerName())) 
															{
																sendToChannelIn("message:" + message, client);
																sendToChannelIn("send:/jefrey " + message, client);
															}else{
																if (loggedUsers.get(key) != null) 
																{
																	String strUserChanel = userChanel.get(key);

																	if (strUserChanel.equals(strChanel)) 
																	{
																		String words[] = message.toLowerCase().split(" ");

																		int pruf = 0;
																		int isWord = 0;
																		int schwere = 0;

																		String badWort = "";

																		String nick = loggedUsers.get(client);

																		if (db.isBadWords(loggedUsers.get(client))) 
																		{
																			while (pruf < words.length) 
																			{
																				if (badWord.get(words[pruf]) != null) 
																				{
																					isWord = 1;
																					if (badWord.get(words[pruf]) > schwere) 
																					{
																						badWort = words[pruf];
																						schwere = badWord.get(words[pruf]);
																					}
																				}
																				pruf++;
																			}
																		}

																		if (isWord == 1) 
																		{
																			message = badWords(message, client);
																		}

																		out.writeUTF("message:"+ nick + ": " + message);
																	}

																	String words[] = message.split(" ");

																	if (db.getButtler()&& db.isButtler(userChanel.get(client))) 
																	{
																		if (message.toLowerCase().indexOf(db.getButtlerName().toLowerCase()) != -1)
																		{
																			int i = 0;
																			while (i < words.length) 
																			{
																				if (buttler_words.get(words[i]) != null) 
																				{
																					String answer = buttler_words.get(words[i]);
																					if (answer != null) 
																					{
																						answer = answer.replace("%NICK%",loggedUsers.get(client));

																						out.writeUTF("message:"+ db.getButtlerName()+ ": "+ answer);

																						break;
																					}
																				}
																				i++;
																			}
																			if (i >= words.length) 
																			{
																				Random rand = new Random();
																				int msgIndex = Math.abs(rand.nextInt())% buttler_messages.size();

																				String bmsg = buttler_messages.get(msgIndex).replaceAll("%NICK%",loggedUsers.get(client));

																				out.writeUTF("message:"+ db.getButtlerName()+ ": "+ bmsg);
																			}
																		}
																	}
																}
															}
														}	 
													} catch (IOException e) {}
												}		
											}
										}
									} else {
										if (db.getButtler()) 
										{
											sendToUser(client, "privatein:"+db.getButtlerName()+ ":Sie sind gemutet.");
										} else {
											sendToUser(client, "privatein:"+ db.getProjektname()+ ":Sie sind gemutet.");
										}
									}
								}else{
									sendToUser(client,"privatein:Sie können während dem /hide keine öffentlichen Nachrichten schreiben.");
								}
							} else {
								if (db.getButtler()) 
								{
									sendToUser(client, "privatein:" + db.getButtlerName()+ ":Sie sind gemutet.");
								}else {
									sendToUser(client, "privatein:" + db.getProjektname()+ ":Sie sind gemutet.");
								}
							}
						}else{
							sendToUser(client, "privatein:Es kann hier nicht öffentlich geschrieben werden.");
						}
					}	
				}}
			} else if (type.equals("login")) 
			{
				login(client, message);
			} else if (type.equals("removeConnection")) 
			{
				removeConnection(client);
			}else if(type.equals("takeChannel"))
			{
				takeChannel(message, client);
			} else {
				String strChanel = "";
				if (client != null) 
				{
					strChanel = userChanel.get(client);
			}
			synchronized (outputStreams) 
			{
				Enumeration<Socket> keys = outputStreams.keys();
				while (keys.hasMoreElements()) 
				{
					Socket key = keys.nextElement();
					String strTmp = userChanel.get(key);
					if (strTmp != null) 
					{
						if (strTmp.equals(strChanel)) 
						{
							DataOutputStream out = outputStreams.get(key);

							if (loggedUsers.get(key) != null) 
							{
								try 
								{
									out.writeUTF(query);
								} 
								catch (IOException e) {}
							}
						}
					}
				}
                         }
                  }
           }


ServerThread.java

Java:
public class ServerThread extends Thread
{
    private Server server;

    private Socket client;

    public ServerThread(Server server, Socket client) 
    {
    	this.server = server;
    	this.client = client;

    	start();
    }

    public void run() 
    { 		
    	try 
    	{
    		DataInputStream input = new DataInputStream(client.getInputStream());

    		while(true) 
    		{
    			String message = input.readUTF();

    			server.sendToChannelIn(message, client);
    		}	
    	}
    	
    	catch (EOFException e) {}
    	catch (IOException e) {}

    	finally 
    	{
    		server.removeConnection(client);
    	}
    }
}


Ist wirklich etwas lang... Ich hoffe hier kann mir jemand helfen ;).

PS: Ein Bild sagt mehr als tausend Worte :p
 
Zuletzt bearbeitet:

FArt

Top Contributor
hmm und was genau soll ich nun mit dem Debugger?.
Du sollst herausfinden, warum die Anzeige doppelt erscheint. Mit dem Debugger kann man die Programmlogik zur Laufzeit Schritt für Schritt durchgehen. Sinnvolles Logging mach übrigens viele Debuggereinsätze hinfällig.
Was ist Grundvoraussetzung dafür? Du musst deinen Programmcode verstehen und dir Gedanken machen können, wie es überhaupt dazu kommen kann. Was sind die Voraussetzungen, damit der Fehler auftritt (bei dir, mehrere Clients mit der gleichen IP)? Wie kann das in meiner Logik sein? Werden die Daten doppelt empfangen? Werden sie doppelt in das Modell eingetragen? Werden sie nur zwei mal aus dem Modell herausgeholt? Nutze ich die IP-Adresse als ID?

Um das Programmierern zu lernen... muss man Programmieren
Programmieren ist nicht Code ausscheiden. Um Programmieren zu lernen, muss man auch Fehler analysieren lernen... und noch ein paar Dinge mehr....
 
Zuletzt bearbeitet:

JayWorkDe

Mitglied
Ich bin schon alles möglich durchgegangen... ich habe schon 2 andere Javaprogrammierer hinzugezogen... Niemand findet den Fehler...

Ich war sogar schon so verzweifelt das ich es auf das this schieben wollte...
Daher dachte ich mir das einer von euch evtl. den Fehler findet.

Sieht ihn denn niemand?
 

JayWorkDe

Mitglied
ja für die Formatierung kann ich nichts... Ich kann´s auch leider nicht mehr bearbeiten :(

Also wenn dann würde das bedeuten das für den Server die Clients gleich sind?
Auf dem Bild erkennt man ja das sie es nicht sind.... Aber du bringst mich da auf eine Idee die ich gleich Prüfen werde ;o).
 

JayWorkDe

Mitglied
OK... Also gut ist schonmal das die Formatierung wieder geht ;)...

Schlecht ist das mein Einfall auch nicht funktioniert hat :(... kann mir also bitte jemand helfen?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
P Jenkins Login per Java Download Manager Netzwerkprogrammierung 15
T HTTP JSoup Automatic Website Login Netzwerkprogrammierung 1
Q-bert Link zugang ohne login sperren. Netzwerkprogrammierung 1
S Jsoup Login auf Schulserver Netzwerkprogrammierung 3
T Netzwerk Login Felder ansprechen Netzwerkprogrammierung 1
M HTTPS Login & etwas posten Netzwerkprogrammierung 0
M Sicheres Login-System für App implementieren Netzwerkprogrammierung 6
K Login Shibboleth Netzwerkprogrammierung 0
L Mit Java über PHP in MySQL anmelden (Login script) Netzwerkprogrammierung 3
N HTTP Apache 4.2.1 HttpClient 302 nach Login und auf den weiteren Seiten. Netzwerkprogrammierung 5
D HTTP Frage zu Login & Session ID Netzwerkprogrammierung 5
J Login Bereich auf jeder Seite Netzwerkprogrammierung 4
G Cookie Verwaltungs Problem nach Login auf InetSeite (Wo utma-Cookie?) Netzwerkprogrammierung 18
I HTTP S - Zertifikate+Cockies für Form-basierten Login Netzwerkprogrammierung 2
S Automatischer Login auf einer Webseite Netzwerkprogrammierung 12
E Webseite mit Login laden Netzwerkprogrammierung 5
C Login ohne Erfolg Netzwerkprogrammierung 2
xDarkSunx Hilfe Chat Login Netzwerkprogrammierung 7
T Java => Login mit MySQL Netzwerkprogrammierung 10
M Login mit HtmlUnit Netzwerkprogrammierung 6
K Login via apache httpclient Netzwerkprogrammierung 4
N Login mit Roboter Netzwerkprogrammierung 16
S HTTP Login mit CAS Authentisierung über SSL Netzwerkprogrammierung 2
M Servlet als Login Netzwerkprogrammierung 20
N Login auf Website Netzwerkprogrammierung 11
H HTTP Login mit POSTMethod und httpClient Netzwerkprogrammierung 5
K HTTP Login Internetseite Netzwerkprogrammierung 17
lordcarlos HTTP Apache HttpClient, post und login. Netzwerkprogrammierung 2
G ftp login Netzwerkprogrammierung 10
L Web Login Netzwerkprogrammierung 3
K Bad Request nach Form Login in Jakarta HttpClient Netzwerkprogrammierung 4
H Login Chatsystem Netzwerkprogrammierung 5
2 Redirect, Login und Download bei Rapidshare.com Netzwerkprogrammierung 4
lebenlechzer Login per Telnet auf Router Netzwerkprogrammierung 2
N icq login Netzwerkprogrammierung 16
M Problem: connection abbrechen und login erkennen Netzwerkprogrammierung 2
C Login bei einem php-script Netzwerkprogrammierung 2
S Socket Webserver mit SSLSocket geht nicht Netzwerkprogrammierung 1
N Socket geht auf Windows, aber auf Mac nicht ? Netzwerkprogrammierung 3
KeNnY_tHe_OwNeR Empfangen geht, Senden nicht ?! Netzwerkprogrammierung 18
M lesen vom Client geht nicht Netzwerkprogrammierung 10
G xLightweb-Client + AJAX-Server - geht das? Netzwerkprogrammierung 4
alexpetri simpler Proxy geht nicht Netzwerkprogrammierung 7
A socket.setKeepAlive() geht nicht? Netzwerkprogrammierung 2
Z .ob das wohl geht. Netzwerkprogrammierung 24
D Multicast geht nur auf einem Rechner Netzwerkprogrammierung 9
M RMI lokal über externe IP geht nicht Netzwerkprogrammierung 5
G FAQ Chat geht nicht ? Netzwerkprogrammierung 4
C Einfacher Filedownload mit Sockets geht nicht für pdffiles Netzwerkprogrammierung 16
S Echo geht nicht Netzwerkprogrammierung 3
P URL - 403 ERROR - Google News - PHP geht Netzwerkprogrammierung 5
K RMI - Und es geht einfach nicht Netzwerkprogrammierung 2
S GEHT DAS? - Nur eine Frage! (Printer Port direkt ansteuern?) Netzwerkprogrammierung 4
T RMI, CORBA, COM+, JavaBeans, . ? Womit geht's? Netzwerkprogrammierung 5

Ähnliche Java Themen

Neue Themen


Oben