//Main.java
//Created with Netbeans!
//Netbeans ile oluşturuldu.
//if i can find time, i ll post explanations.
//Eğer zaman bulabilirsem açıklamalarını yazacağım.
//Not: there s a homework to you! Make your own version with GUI :) Use swing library ;)
//Not: Size ödev! Arayüzlü ( GUI ) versiyonunu kendiniz yazın. Swing kütüphanesini kullanın ;)
//use telnet for client
//run -> telnet ->open localhost 9000
//client için telnet kullanın
//çalıştır -> telnet ->open localhost 9000
public class Main {
public static void main(String[] args) {
MainServer m = new MainServer();
}
}
//MainServer.java
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Vector;
import java.util.logging.Level;
import java.util.logging.Logger;
public class MainServer extends Thread{
private ServerSocket ss;
private Socket sock;
private Vector<ServerThread> v = new Vector<ServerThread>();
private ServerThread t;
public MainServer(){
this.start();
};
public void run(){
try {
this.ss = new ServerSocket(9000);
System.out.println("ServerSocket Started");
Pinger p = new Pinger(this);
p.start();
while(true){
this.sock = ss.accept();
this.t = new ServerThread(this.sock,this);
this.t.start();
this.v.add(this.t);
System.out.println("New Connection accepted vector size:"+this.v.size()+"-index:"+this.v.indexOf(this.t));
}
} catch (IOException ex0) {
Logger.getLogger(MainServer.class.getName()).log(Level.SEVERE, null, ex0);
try {
this.sock.close();
} catch (IOException ex2) {
Logger.getLogger(MainServer.class.getName()).log(Level.SEVERE, null, ex2);
}
}finally{
try {
this.ss.close();
} catch (IOException ex3) {
Logger.getLogger(MainServer.class.getName()).log(Level.SEVERE, null, ex3);
}
}
}
public void sendAll(String str) {
System.out.println(str);
for(int i=0;i<this.v.size();i++){
this.v.get(i).out(str);
}
}
public void sendMe(String nick, String str){
System.out.println("<" + nick + ">" + str);
}
public void sendAll(String nick, String str){
System.out.println("<" + nick + ">" + str);
for(int i=0;i<this.v.size();i++){
if(this.v.get(i).getNick()!=nick){
this.v.get(i).out(nick,str);
}
}
}
public void Ping(){
for(int i=0;i<this.v.size();i++){
this.v.get(i).Pong();
}
}
public String listClients() {
return this.v.size()+"";
}
void Pong(ServerThread aThis,String n, boolean a, boolean b, boolean c, boolean d) {
if(this.v.contains(aThis)){
if(b){
this.v.remove(aThis);
System.out.println(n + " closed connection.");
}else{
System.out.println(n + " Pong!");
//System.out.println(this.v.lastIndexOf(aThis)+" ok! " + n + " " + a + "," + b + "," + c + "," + d);
}
}else{
//:)
System.out.println("You must kill " + n + " " + a + "," + b + "," + c + "," + d);
}
}
}
//ServerThread.java
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.logging.Level;
import java.util.logging.Logger;
public class ServerThread extends Thread{
private Socket clientSocket;
private String inMsg;
private MainServer ms;
private String nickname;
private BufferedReader inStream;
private PrintWriter outStream;
public ServerThread(Socket s, MainServer x){
this.clientSocket = s;
this.ms = x;
Nickname n = new Nickname();
n.CreateUid();
this.nickname = n.getUid();
}
public void run(){
try {
this.inStream = new BufferedReader(new InputStreamReader(this.clientSocket.getInputStream()));
this.ms.sendAll(this.nickname + " has connected at adress: "+this.clientSocket.getRemoteSocketAddress());
out("for change nick use /n nick command. Default nickname is: "+this.nickname);
while((this.inMsg = this.inStream.readLine()) != null) {
if(!this.inMsg.equals("")){
if(checkin(this.inMsg)){
}else{
this.ms.sendAll(this.nickname,this.inMsg);
}
}
}
} catch (IOException ex3) {
Logger.getLogger(ServerThread.class.getName()).log(Level.SEVERE, null, ex3);
}finally{
try {
this.inStream.close();
this.clientSocket.close();
} catch (IOException ex4) {
Logger.getLogger(ServerThread.class.getName()).log(Level.SEVERE, null, ex4);
}
}
}
public void out(String s2){
try {
this.outStream = new PrintWriter(new OutputStreamWriter(this.clientSocket.getOutputStream()));
this.outStream.println(s2);
this.outStream.flush();
} catch (IOException ex5) {
Logger.getLogger(ServerThread.class.getName()).log(Level.SEVERE, null, ex5);
}
}
public void out(String n,String s2){
try {
this.outStream = new PrintWriter(new OutputStreamWriter(this.clientSocket.getOutputStream()));
this.outStream.println("<"+n+">"+s2);
this.outStream.flush();
} catch (IOException ex5) {
Logger.getLogger(ServerThread.class.getName()).log(Level.SEVERE, null, ex5);
}
}
public boolean checkin(String s){
if(s.startsWith("/n")){
String[] parts = s.split(" ");
this.ms.sendMe(this.nickname, "/n");
this.ms.sendAll("Client <" + nickname + "> changes nickname to " + "<" + parts[1] + ">");
nickname = parts[1];
return true;
}else if(s.startsWith("/list")){
out(this.ms.listClients());
this.ms.sendMe(this.nickname, "/list");
return true;
}else{
return false;
}
}
public String getNick(){
return this.nickname;
}
public void Pong() {
this.ms.Pong(this,this.nickname,this.clientSocket.isConnected(),this.clientSocket.isClosed(),this.clientSocket.isInputShutdown(),this.clientSocket.isOutputShutdown());
}
}
//Nickname.java
import java.util.Date;
import java.util.Random;
public class Nickname {
private String uqNick;
private String uid = "";
public Nickname(){
Random rnd = new Random();
int r = rnd.nextInt(100);
String s = r+"";
this.uid=s;
}
public void CreateUid(){
Date d = new Date();
long a = System.nanoTime();
int min = d.getMinutes();
int sec = d.getSeconds();
String ab = ""+a;
this.uqNick = this.uid+(ab.charAt(ab.length()-2))+(ab.charAt(ab.length()-1))+min+sec+(ab.charAt(ab.length()-3));
}
public String getUid(){
return "guest"+this.uqNick;
}
}
//Pinger.java
import java.util.logging.Level;
import java.util.logging.Logger;
class Pinger extends Thread{
private MainServer m;
public Pinger(MainServer m){
this.m = m;
}
public void run(){
while(true){
try {
Thread.sleep(10000);
m.sendMe("d'_'b", "Ping!");
this.m.Ping();
System.gc();
} catch (InterruptedException ex) {
Logger.getLogger(Pinger.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
}
0 yorum:
Yorum Gönder