001 package purvainais;
002
003 import java.util.logging.*;
004 import java.io.*;
005 import java.net.*;
006
007 public class Chat {
008 private static Logger log = Logger.getAnonymousLogger();
009
010 public Chat() {
011 }
012
013 public void start() {
014 log.setLevel(Level.OFF); // need no logging output, lol
015
016 log.info("Hai, es esmu chatins!");
017
018 try {
019 Socket socket = null;
020 try {
021 ServerSocket serverSocket = new ServerSocket(7777);
022
023 log.info("I will act as a server");
024 socket = serverSocket.accept();
025
026
027 } catch (IOException ioe) {
028 if (ioe.getMessage().indexOf("Address already in use") != -1) {
029
030 log.info("I will act as a client");
031 socket = new Socket("localhost", 7777);
032
033 } else {
034 throw ioe;
035 }
036 }
037
038 Thread rt = new ReaderThread(socket.getInputStream());
039 rt.start();
040
041 Thread wt = new WriterThread(socket.getOutputStream());
042 wt.start();
043
044 } catch (IOException e) {
045 log.severe(e.getMessage());
046 }
047
048
049 };
050
051 public static void main(String[] arguments) {
052 (new Chat()).start();
053 }
054
055
056 private class ReaderThread extends Thread {
057 String s;
058 BufferedReader reader;
059
060 ReaderThread(InputStream is) {
061 super();
062 reader = new BufferedReader(
063 new InputStreamReader( is ));
064 }
065
066 public void run() {
067 try {
068 while ( ( s = reader.readLine() ) != null ) {
069 log.info("received message: " + s);
070 System.out.println("he said:" + s);
071 }
072 } catch (IOException ioe) {
073 log.severe(ioe.getMessage());
074 }
075 }
076 };
077
078
079 private class WriterThread extends Thread {
080 String s;
081 BufferedWriter writer;
082 BufferedReader reader;
083
084 WriterThread(OutputStream os) {
085 super();
086 writer = new BufferedWriter(
087 new OutputStreamWriter( os ));
088
089 reader = new BufferedReader(
090 new InputStreamReader( System.in ));
091 }
092
093 public void run() {
094 try {
095 while ( ( s = reader.readLine() ) != null ) {
096 log.info("will send message: " + s);
097 writer.write(s);
098 writer.newLine();
099 writer.flush();
100 }
101 } catch (IOException ioe) {
102 log.severe(ioe.getMessage());
103 }
104 }
105 };
106 }
|