Timo Geier
7 years ago
commit
d2d48e8eab
5 changed files with 249 additions and 0 deletions
-
12Online-Chat-Dev.iml
-
68src/com/vertsys/Client.java
-
41src/com/vertsys/ClientThread.java
-
65src/com/vertsys/Server.java
-
63src/com/vertsys/ServerThread.java
@ -0,0 +1,12 @@ |
|||
<?xml version="1.0" encoding="UTF-8"?> |
|||
<module type="JAVA_MODULE" version="4"> |
|||
<component name="NewModuleRootManager" inherit-compiler-output="true"> |
|||
<exclude-output /> |
|||
<content url="file://$MODULE_DIR$"> |
|||
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" /> |
|||
</content> |
|||
<orderEntry type="inheritedJdk" /> |
|||
<orderEntry type="sourceFolder" forTests="false" /> |
|||
</component> |
|||
</module> |
|||
|
@ -0,0 +1,68 @@ |
|||
package com.vertsys; |
|||
|
|||
import java.io.BufferedReader; |
|||
import java.io.DataOutputStream; |
|||
import java.io.IOException; |
|||
import java.io.InputStreamReader; |
|||
import java.net.Socket; |
|||
import java.util.Random; |
|||
|
|||
public class Client { |
|||
|
|||
protected static Socket sock; |
|||
private static String username; |
|||
private static BufferedReader ConsoleIn; |
|||
|
|||
public static void main(String[] args) { |
|||
init(); |
|||
do { |
|||
try { |
|||
String msg = ConsoleIn.readLine(); |
|||
sendMessage(msg); |
|||
} catch (IOException e) { |
|||
e.printStackTrace(); |
|||
} |
|||
}while (true); |
|||
} |
|||
|
|||
public static void init(){ |
|||
String hostname = "localhost"; |
|||
int port = 42424; |
|||
|
|||
// Falls die Vergabe eines Benutzernamen fehlschlägt --> "test" + Zufallszahl |
|||
Random rand = new Random(); |
|||
username = "test" + Integer.toString(rand.nextInt(4)); |
|||
try { |
|||
ConsoleIn = new BufferedReader(new InputStreamReader(System.in)); |
|||
System.out.print("Your Username: "); |
|||
String user = ConsoleIn.readLine(); |
|||
if (user != "") |
|||
username = user; |
|||
System.out.print("Enter Server hostname: "); |
|||
hostname = ConsoleIn.readLine(); |
|||
System.out.print("Enter port number: "); |
|||
port = Integer.parseInt(ConsoleIn.readLine()); |
|||
}catch (IOException e){ |
|||
e.printStackTrace(); |
|||
} |
|||
try { |
|||
sock = new Socket(hostname, port); |
|||
System.out.println("Connection established!"); |
|||
System.out.println("--------------------------------"); |
|||
System.out.println(""); |
|||
new Thread(new ClientThread()).start(); |
|||
} catch (IOException e) { |
|||
e.printStackTrace(); |
|||
} |
|||
} |
|||
|
|||
public static void sendMessage(String message){ |
|||
String moddedMessage = username + " wrote: " + message + "\n"; |
|||
try { |
|||
DataOutputStream toServer = new DataOutputStream(sock.getOutputStream()); |
|||
toServer.writeBytes(moddedMessage); |
|||
} catch (IOException e) { |
|||
e.printStackTrace(); |
|||
} |
|||
} |
|||
} |
@ -0,0 +1,41 @@ |
|||
package com.vertsys; |
|||
|
|||
//import static com.vertsys.Server.sock; |
|||
|
|||
import java.io.BufferedReader; |
|||
import java.io.IOException; |
|||
import java.io.InputStreamReader; |
|||
import java.io.ObjectInputStream; |
|||
import java.util.ArrayList; |
|||
|
|||
|
|||
public class ClientThread extends Client implements Runnable{ |
|||
|
|||
@Override |
|||
public void run() { |
|||
ArrayList<String> msgs = new ArrayList<>(); |
|||
try { |
|||
ObjectInputStream allMessagesStream = new ObjectInputStream(sock.getInputStream()); |
|||
msgs = (ArrayList<String>) allMessagesStream.readObject(); |
|||
} catch (IOException e) { |
|||
e.printStackTrace(); |
|||
} catch (ClassNotFoundException e) { |
|||
e.printStackTrace(); |
|||
} |
|||
|
|||
|
|||
msgs.forEach(msg -> { |
|||
System.out.println(msg); |
|||
}); |
|||
|
|||
while(!sock.isClosed()){ |
|||
try { |
|||
BufferedReader fromServer = new BufferedReader(new InputStreamReader(sock.getInputStream())); |
|||
String newMessage = fromServer.readLine(); |
|||
System.out.println(newMessage); |
|||
} catch (IOException e) { |
|||
e.printStackTrace(); |
|||
} |
|||
} |
|||
} |
|||
} |
@ -0,0 +1,65 @@ |
|||
package com.vertsys; |
|||
|
|||
import java.io.IOException; |
|||
import java.net.ServerSocket; |
|||
import java.net.Socket; |
|||
import java.util.ArrayList; |
|||
|
|||
|
|||
public class Server { |
|||
protected static ServerSocket sock; |
|||
protected static ArrayList<String> messages = new ArrayList<>(); |
|||
protected static ArrayList<Socket> clients = new ArrayList<>(); |
|||
// protected static ArrayList<String> messages = new ArrayList<>(); |
|||
protected static int port; |
|||
|
|||
protected static boolean DEBUG_MODE = true; |
|||
|
|||
public static void main(String[] args){ |
|||
init(args); |
|||
try { |
|||
sock = new ServerSocket(port); |
|||
} catch (IOException e) { |
|||
e.printStackTrace(); |
|||
} |
|||
while (true){ |
|||
if (DEBUG_MODE) |
|||
System.out.println("Socket opened... Waiting for connections"); |
|||
try { |
|||
Socket connSocket = sock.accept(); |
|||
clients.add(connSocket); |
|||
new Thread(new ServerThread(connSocket)).start(); |
|||
} catch (IOException e){ |
|||
|
|||
} |
|||
} |
|||
|
|||
} |
|||
|
|||
|
|||
public static void init(String[] args){ |
|||
|
|||
switch (args.length) { |
|||
case 0: |
|||
if (DEBUG_MODE) |
|||
System.out.println("No Parameters. Set port to default values..."); |
|||
port = 42424; |
|||
break; |
|||
case 1: |
|||
if (DEBUG_MODE) |
|||
System.out.println("Port as Parameter."); |
|||
port = Integer.parseInt(args[1]); |
|||
if (port < 0) { |
|||
System.err.println("ERROR: Port must be a value >= 0!"); |
|||
System.out.println("Usage: java ConcatServer [port]"); |
|||
System.exit(-1); |
|||
} |
|||
break; |
|||
|
|||
default: |
|||
System.out.println("Usage: java ConcatServer [port]"); |
|||
System.exit(0); |
|||
break; |
|||
} |
|||
} |
|||
} |
@ -0,0 +1,63 @@ |
|||
package com.vertsys; |
|||
|
|||
import java.io.*; |
|||
import java.net.Socket; |
|||
|
|||
public class ServerThread extends Server implements Runnable{ |
|||
|
|||
private Socket sock; |
|||
|
|||
public ServerThread(Socket sock){ |
|||
this.sock = sock; |
|||
} |
|||
|
|||
@Override |
|||
public void run() { |
|||
if (DEBUG_MODE) |
|||
System.out.println("New connection --> New Thread started."); |
|||
if(DEBUG_MODE) |
|||
System.out.println("Send all received messages to new client..."); |
|||
try { |
|||
ObjectOutputStream toNewClient = new ObjectOutputStream(sock.getOutputStream()); |
|||
toNewClient.writeObject(messages); |
|||
} catch (IOException e) { |
|||
e.printStackTrace(); |
|||
} |
|||
while(!sock.isClosed()){ |
|||
System.out.println("Still running..."); |
|||
this.addMessage(); |
|||
} |
|||
if(DEBUG_MODE) |
|||
System.out.println("Socket closed --> Joining Thread..."); |
|||
} |
|||
|
|||
private void addMessage(){ |
|||
String newMessage = ""; |
|||
try { |
|||
newMessage = readMessage(); |
|||
} catch (IOException e) { |
|||
e.printStackTrace(); |
|||
} |
|||
if (DEBUG_MODE) |
|||
System.out.println("Add new Message..."); |
|||
messages.add(newMessage); |
|||
if(DEBUG_MODE) |
|||
System.out.println(newMessage); |
|||
String finalNewMessage = newMessage; |
|||
clients.forEach(socket -> { |
|||
DataOutputStream outgoing = null; |
|||
|
|||
try { |
|||
outgoing = new DataOutputStream(socket.getOutputStream()); |
|||
outgoing.writeBytes(finalNewMessage + "\n"); |
|||
} catch (IOException e) { |
|||
e.printStackTrace(); |
|||
} |
|||
|
|||
}); |
|||
} |
|||
private String readMessage() throws IOException { |
|||
BufferedReader incoming = new BufferedReader(new InputStreamReader(sock.getInputStream())); |
|||
return incoming.readLine(); |
|||
} |
|||
} |
Write
Preview
Loading…
Cancel
Save
Reference in new issue