From a8320e313b13061b807312e173a2b5058a5fe1a8 Mon Sep 17 00:00:00 2001 From: Bhargava Balachandra Hegde Date: Sat, 24 Sep 2016 17:03:00 +0530 Subject: [PATCH 1/2] change project structure --- TCP/.gitignore | 4 + TCP/ChatTCPClient$1.class | Bin 1940 -> 0 bytes TCP/ChatTCPClient.class | Bin 3013 -> 0 bytes TCP/ChatTCPClient.java | 131 --------- TCP/ChatTCPServer.class | Bin 1369 -> 0 bytes TCP/ChatTCPServer.java | 261 ------------------ TCP/ChatUser.java | 56 ---- TCP/Distributor.class | Bin 5082 -> 0 bytes TCP/Listener.class | Bin 1557 -> 0 bytes TCP/README.md | 13 + TCP/TCPClient/pom.xml | 12 + .../main/java/com/secure/client/Client.java | 133 +++++++++ TCP/TCPServer/pom.xml | 12 + .../java/com/secure/server/Distributor.java | 198 +++++++++++++ .../main/java/com/secure/server/Listener.java | 43 +++ .../main/java/com/secure/server/Server.java | 42 +++ .../src/main/java/com/secure/server/User.java | 55 ++++ 17 files changed, 512 insertions(+), 448 deletions(-) create mode 100644 TCP/.gitignore delete mode 100755 TCP/ChatTCPClient$1.class delete mode 100755 TCP/ChatTCPClient.class delete mode 100755 TCP/ChatTCPClient.java delete mode 100755 TCP/ChatTCPServer.class delete mode 100755 TCP/ChatTCPServer.java delete mode 100755 TCP/ChatUser.java delete mode 100755 TCP/Distributor.class delete mode 100755 TCP/Listener.class create mode 100644 TCP/README.md create mode 100644 TCP/TCPClient/pom.xml create mode 100644 TCP/TCPClient/src/main/java/com/secure/client/Client.java create mode 100644 TCP/TCPServer/pom.xml create mode 100644 TCP/TCPServer/src/main/java/com/secure/server/Distributor.java create mode 100644 TCP/TCPServer/src/main/java/com/secure/server/Listener.java create mode 100644 TCP/TCPServer/src/main/java/com/secure/server/Server.java create mode 100644 TCP/TCPServer/src/main/java/com/secure/server/User.java diff --git a/TCP/.gitignore b/TCP/.gitignore new file mode 100644 index 0000000..bda8197 --- /dev/null +++ b/TCP/.gitignore @@ -0,0 +1,4 @@ +/TCPClient/target +/TCPServer/target +*iml +*/.idea \ No newline at end of file diff --git a/TCP/ChatTCPClient$1.class b/TCP/ChatTCPClient$1.class deleted file mode 100755 index 48c37230f121c3d3d8d362c2488a991312c37479..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1940 zcmaJ?QBxaL6#h2ZWW&0YkP;~hf&wLkwxm^20joBGjRK(%Xen*&l59g@*@R?+RGo3g zw?4K{jCBSdoZ-2SO*=aJ;!K^ng;TPj8|Cd7CMZ>u3SnBfW)BoK6Y)%rIeP&0?is<);mMwU|?IO~c2yuAvuw8eYaL8u}4eplet`RznVi zf`VlYH;|Xm?v%mQt^Dx3T_(=CYQfAIWeuw+2(hMN9VSU>*Z{dps)C}15;j>Cb-cf# zvMS*Nl=RA)k+l^Np#m0KzOazWXsBXKLNw`e?a4a5=&3l((C`ViHQYp8LYo6rC=O4g zCnvVEM#(M|nN;R-RKuq*HGGES5{~Z2rP7`-e=0r7nj9)r-)RY2%Cd}d($p&zqryra zu$`+~mfM*FM5|P_Sqnqo@bF1jZI9XWzHZgn%|lta&Jw{k&g)jrG|CeCV^2?tYjKL7 zS!H;Rlh)#pJD5ueNAiZ9@{($g4Z1s7CyzsHX6Rw2$2_rK4})cq(HX`RTd9{yhQ;N{ z22amOj5X4EOpPfaN@pzjf9{Z7+^ds?xd`ajT>f|WD2(*!z1xB)cC zS}IN^lXLsb2p;T!IJ7*7D*H8UR4RI2Ec9%a&wYtR0zJGnTOm>V!eMcY0cxIU-mE_U z`*ED!0X_|I?Wb;u58a0pKXD(v_yhRw(Ig>88Keg0C8x)T@vb{zbr-!<&AaIQ5uv3AXzGw_P`mEb@LUbrsJvJI zqeG4aYiRxo-F!OYJVn1lOC&7+gw`d0hdf_HFDM`VcSfVaOZW<%YiWtk8Q-?RIdNUkhLdkNB1FIYqjL zc3Kwr^;tw1m(YeKS}vmtSNKu6iWy$2E4U7u@(X0~B@Em`9=CZz?(j0ai#2@Bi}E2% z{KEAkUY5VY!k;MOFKl9n=!;aX{?xyDNUli-o;{X5v diff --git a/TCP/ChatTCPClient.class b/TCP/ChatTCPClient.class deleted file mode 100755 index 53b9e60049ec700f4f7a47e481fb63e7458d7a4b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3013 zcmZuzX?qh@6n>{kI_Wr2nnGDDSfEInLR-qFt$?-y4Wup5f)o&(CPN!YCn1?YK}B(2 za2Iz4ajCn4G(r13`~biCQU8R$K=D13G?@a;)4BJad-n65GxNuPzuy4Rj^8w_#X$`n zIHclH4IUh>BISte9+RCRyJ6WyRm4=7RX8fdyD*|b!>HWERU8xYaTN&-0UYvUOjb+7 z93*9z(r^N46&XKl4GV?nLDr9xew>o4aX(Irx--K3xF1hwcoJv*cuLl%HJrmU@_5#d z=TtoJ#|s)lNUC^I#Y-Am@QQ}jc-4>d8r^tJ#p@d0z?%}=VR^hIkGF;A9ofCB;(`J_ znuwd0J&=qZH*Ezqkz>Y5qt!C))&i+hK}FnBFt2bCPqv1wRMsA_)21=TOHVROvAWW2 zf7W(i`!aS+#21tpy0S-)nrSn($24MQni?t}h+A=cGnE7jObNppX{CX z_*BP3=u)t_WOlE0+)AFZdXgD?>v+^m+3}<$wmwrZ-(hmqyDJ+{5ETl1g1!zN7ja3) z=eVrn3tU$5rH-%gwSwA`Fa0H*ELFIlB7G9IH{9RQp+I416CwZ|--wor_?F5~WaG9* ztmya--}AhCZ+KAC@dJKT@sp09@r#ZtqGp~zgg9)lN6m&pL$tKC5Hi#DxAt#yIpF1y zR_Bz%DxiQ>m{Fw0HEg`FWtr*jgptXZ8Ohv!d0bVnWN*e8F*_Pc7-$$}>MUc-Y)B>3 zwvJzMjcA;qP{pK<9P&CM=+!ZRK^@nzTgNVm!sSo@@G&z=RJ%w8C@PrEhH;ga)tT;^ z+nT|AFW1&2KDveaiv|MZuWi&TUcozfUVFT0MJmH}`(D|!5OaymC9yt&LPP*dVeLZ;)L%+qh5!$DOt z3uJsLs1J7EZmsNCrFkN2Bsjljs4SGNv*`d;(etj;wn-Lmu<0OMtprAQ;%WO-I&RaT zFL4R6qyx;14Khb`M2k+$@wjC982@fQE4 z$61(WGPaSnv6OF^4!&HysE}F1U4={bT@EKZgYqXmH;zD%{^)y1znay>xmD-`uhu;mf)L+vrw12MJJ3Y7Kt@)T0(F zF_%0G$vuyO)!`8LM=&3cVF8}NB5bF`0(fqc!K0!_1+%26*l|R~&U)%)%NB!Q%$2i> zu`<+OxKSLVl@4(USvl6Zmpl#g)4{`aMRN}IjHlNX?_vhBDhGEwqSeb(PsdRQA1RHb ztt52?{J58=pyR8GitR<$I6eyYlnX_Bf74E2Ne=e}8Y13J_1;V9E~c42SLd*lw&!R$ zEMul4&4J}PG=2zwU`52Ui40Zr_TC&;$~K1}bxhp6AsU-l6$#o2W<25wMv6zNa`Bwv z=b=nsmz$3~!pFFaMK1FN-F#AP@|BY_&3DDgr-2xY4j4Gkk1JWPm6CRh#RS$cS?&Dt zTZ>s(M+j`dDs04h+>iT+_zps0E0G={*7p$K2Z(Khb&HW|vYO|Z;+J_oj~={+FuuhO zzH0htWhW*n^(Vpb7pp9wSqk-E%o4n;ntzjUBWQXY!y*1M{VC5" ); - String message = ""; - boolean on = true; - while( on == true ) - { - message = stdin.readLine() + '\n'; - if( message.equals("quit\n") ) - { - message = "QUIT\n"; - on = false; - } - out.write( message.getBytes() ); - out.flush(); - message = ""; - //inBuf.close(); - //outBuf.close(); - } - System.out.println( "closing the Socket..." ); - clientSocket.close(); - - } catch (UnknownHostException e) { - System.out.println("Sock:" + e.getMessage()); - close(clientSocket); - } catch (EOFException e) { - System.out.println("EOF:" + e.getMessage()); - close(clientSocket); - } catch (IOException e) { - System.out.println("IO:" + e.getMessage()); - close(clientSocket); - } - } - - private Thread createHandler(final Socket aClientSocket) { - Thread handler = new Thread(new Runnable() { - public void run() { - try { - InputStream in = aClientSocket.getInputStream(); - OutputStream out = aClientSocket.getOutputStream(); - int c; - String reply = ""; - boolean on = true; - while( on == true ) - { - while( (c = in.read()) != -1 && ( (char)c != '\n' ) && ( (char)c != '\r' ) ) { - reply += (char)c; - } - if( !reply.equals("") && !reply.equals("\n") ) { - System.out.printf( "\n<%s\n>", reply ); - } - if( reply.indexOf("QUIT") > 5 ) { - on = false; - } - reply = ""; - } - System.out.println("Closing client socket"); - aClientSocket.close(); - - } catch (EOFException e) { - System.out.println("EOF:" + e.getMessage()); - close(aClientSocket); - } catch (IOException e) { - System.out.println("IO:" + e.getMessage()); - close(aClientSocket); - } - } - }); - return handler; - } - - public static void main( String args[] ) - { - if( args.length != 2 ) - { - System.out.println( "Usage: TCPClient hostname port" ); - System.exit(1); - } - - ChatTCPClient myClient = new ChatTCPClient( args[0], Integer.parseInt(args[1]) ); - Thread myHandler = myClient.createHandler( myClient.getSocket() ); - myHandler.start(); - myClient.chat(); - } -} diff --git a/TCP/ChatTCPServer.class b/TCP/ChatTCPServer.class deleted file mode 100755 index 431cf06953f5a874b53655679fa60a924a0a5b01..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1369 zcmaJ>+foxj5IqA6n=BiUaE*utyoE@JqM`-_F@Qz`M1v@TmrXJi7Q$|7GokcreDql# z7D}r80N?xu|3mHBfCNFam6`6IGd-s-Gv9uG`3hhZISpqJ_2UYLeTZooL0lu{s)lPA zRdHQ|iW@3!YVafK!}GE61HBBUd7evSpYSLw95~y!=Yt&V=2Rq;T_L!=n`o>hz@PlS&E!xI_X5tAw&>3EE^j(IGoSk#fh6NWC2oyA4G z<~D2RH@T307Z`f}rhdO_mI~YmR%)ySFIL=&rl%*m4h2w<8^N8%nWK-f=X1yuE@znRQNlS+$xcj zENS~8zmz3-QRc~4Hk=A4^&d{CXw62s%&h`L?4(nU9lT!xV%=KgB1M&(E)*PIsW9|L zhH7wG&bk%C9`Rkv-uOPat}_pP>*PCa=Z%u=9k1Dm=^2XiKYV<`t~EGA=K+&C=ftAP zYZn=EUbZ>}WzHP}{@Pq}D!5v09)=paz%Ld-=Mfw~i9=~)RW zu^sd#nqncvMJUwd;`GN~Kj`EJkJ}gmB%lUGyG8-8 kQ-Br)TcHTf)2;xK{)r@0aY4mJTq2V~p" ); - System.exit(1); - } - int port = Integer.parseInt(args[0]); - - ServerSocket myServerSocket = new ServerSocket( port ); - System.out.println( "Server startet on " + myServerSocket.getInetAddress() + ":" + myServerSocket.getLocalPort()); - - Distributor myDistributor = new Distributor( ); - myDistributor.start( ); - - while( true ) - { - Socket clientSocket = myServerSocket.accept( ); - Listener myListener = new Listener( clientSocket, myDistributor ); - myDistributor.addClient( clientSocket ); - myListener.start( ); - } - } -} - -class Listener extends Thread -{ - private Socket lSocket; - private Distributor lDistributor; - private BufferedReader lSocketReader; - - public Listener(Socket aSocket, Distributor aDistributor) throws IOException - { - lSocket = aSocket; - lSocketReader = new BufferedReader( new InputStreamReader( lSocket.getInputStream() ) ); - lDistributor = aDistributor; - } - - public void run() - { - try { - while( !isInterrupted() ) - { - String message = lSocketReader.readLine( ); - if( message == null ) - break; - lDistributor.parseMessage( lSocket, message ); - } - } catch(IOException exception) { - System.err.println("IO: " + exception.getMessage()); - lDistributor.delClient( lSocket ); - } catch(ArrayIndexOutOfBoundsException exception) { - System.err.println("IO: " + exception.getMessage()); - lDistributor.delClient( lSocket ); - } - lDistributor.delClient( lSocket ); - } -} - -class Distributor extends Thread -{ - private Vector dClients = new Vector(); - private Vector dUsers = new Vector(); - private Vector dMessages = new Vector(); - private int anzRegistered = 0; - - public synchronized void addClient( Socket aClientSocket ) - { - dClients.add( aClientSocket ); - dUsers.add( "noname" ); - System.out.printf("reg:%2d all:%2d # %s/%d # new Client connected\n", anzRegistered, dUsers.size(), aClientSocket.getInetAddress().getHostAddress(), aClientSocket.getPort()); - } - - public synchronized void delClient( Socket aClientSocket ) - { - int i = dClients.indexOf( aClientSocket ); - if (i != -1) - { - String tmpName = (String)dUsers.get(i); - String message = "SERVER: " + tmpName + " QUIT\n"; - if( !tmpName.equals("noname") ) - anzRegistered--; - dClients.removeElementAt( i ); - dUsers.removeElementAt( i ); - sendInfo( aClientSocket, message ); - try { - aClientSocket.close( ); - } catch(IOException exception) { - System.err.println("IO: " + exception.getMessage()); - close( aClientSocket ); - } - } - } - - private void close(Socket cSocket) - { - try { - cSocket.close(); - } catch (IOException e) { - System.out.println("IO :" + e.getMessage()); - } - } - - public synchronized void sendInfo( Socket aClientSocket, String aMessage) - { - try { - OutputStream out = aClientSocket.getOutputStream( ); - out.write( aMessage.getBytes() ); - out.flush( ); - } catch(IOException exception) { - System.err.println("IO: " + exception.getMessage()); - delClient( aClientSocket ); - } - } - - private synchronized void setUsername( Socket aClientSocket, String aClientName ) - { - String message = ""; - if( aClientName.length() > 1 ) - { - int i = dClients.indexOf( aClientSocket ); - if( i != -1 ) - { - dUsers.set( i, aClientName ); - message = "SERVER: " + aClientName + " USER\n"; - } - anzRegistered++; - } - else - message = "SERVER: USERNAME: '" + aClientName + "' is to short!\n"; - sendInfo( aClientSocket, message ); - } - - private synchronized void showUsers( Socket aClientSocket ) - { - String message = ""; - int i = dClients.indexOf( aClientSocket ); - String tmpName = (String)dUsers.get(i); - if( !tmpName.equals("noname") ) - { - message = "SERVER: " + (String)dUsers.get(i) + " USERS: "; - for( i=0 ; i < dUsers.size() ; i++ ) - { - message += (String)dUsers.get(i); - if( i < (dUsers.size()-1) ) - message += ", "; - } - message += "\n"; - } - else - message = "SERVER: You are not registered" + "\n"; - sendInfo( aClientSocket, message ); - } - - private synchronized void sendMessage( Socket aClientSocket, String aMessage ) - { - String message = ""; - int i = dClients.indexOf( aClientSocket ); - String tmpName = (String)dUsers.get(i); - if( !tmpName.equals("noname") ) - { - message = (String)dUsers.get(i) + ": " + aMessage + "\n\r"; - dMessages.add( message ); - } - else - { - message = "SERVER: You are not registered" + "\n"; - sendInfo( aClientSocket, message ); - } - } - - public synchronized void parseMessage( Socket aClientSocket, String aMessage ) - { - int i = dClients.indexOf( aClientSocket ); - String command = ""; - String option = ""; - StringTokenizer tokenizer = new StringTokenizer( aMessage ); - - if( tokenizer.hasMoreTokens() ) - command = tokenizer.nextToken( ); - - if( tokenizer.hasMoreTokens() ) - option += tokenizer.nextToken( ); - while( tokenizer.hasMoreTokens() ) - option += " " + tokenizer.nextToken( ); - - if( command.equals("USER") ) - { - setUsername( aClientSocket, option ); - System.out.printf("reg:%2d all:%2d # %s/%d # %s: User '%s' added\n", anzRegistered, dUsers.size(), aClientSocket.getInetAddress().getHostAddress(), aClientSocket.getPort(), (String)dUsers.get(i), option); - } - else if( command.equals("USERS") ) - { - showUsers( aClientSocket ); - System.out.printf("reg:%2d all:%2d # %s/%d # %s: Userlist requested\n", anzRegistered, dUsers.size(), aClientSocket.getInetAddress().getHostAddress(), aClientSocket.getPort(), (String)dUsers.get(i)); - } - else if( command.equals("PRIVMSG") ) - { - sendMessage( aClientSocket, option ); - System.out.printf("reg:%2d all:%2d # %s/%d # %s: Message '%s'\n", anzRegistered, dUsers.size(), aClientSocket.getInetAddress().getHostAddress(), aClientSocket.getPort(), (String)dUsers.get(i), option); - } - else if( command.equals("QUIT") ) - { - delClient( aClientSocket ); - System.out.printf("reg:%2d all:%2d # %s/%d # %s: Quit from Chat\n", anzRegistered, dUsers.size(), aClientSocket.getInetAddress().getHostAddress(), aClientSocket.getPort(), (String)dUsers.get(i)); - } - else - { - String message = "SERVER: Unknown Command: " + command + "\n"; - sendInfo( aClientSocket, message ); - System.out.printf("reg:%2d all:%2d # %s/%d # %s: Unknown Command '%s'\n", anzRegistered, dUsers.size(), aClientSocket.getInetAddress().getHostAddress(), aClientSocket.getPort(), (String)dUsers.get(i), command); - } - notify( ); - } - - private synchronized String getNextMessage() throws InterruptedException - { - while( dMessages.size() == 0 ) - wait( ); - String message = (String)dMessages.get( 0 ); - dMessages.removeElementAt( 0 ); - return message; - } - - private synchronized void send2Clients( String aMessage ) - { - for( int i=0 ; i < dClients.size() ; i++ ) - { - Socket socket = (Socket)dClients.get(i); - sendInfo( socket, aMessage ); - } - } - - public void run() - { - try { - while( true ) - { - String message = getNextMessage(); - send2Clients(message); - } - } catch (InterruptedException ie) { - // Thread interrupted. Do nothing - } - } -} - -// private ChatUser[] Users = new ChatUser[20]; -// private int anzUser = 0; -// private int aktUser = 0; -// private boolean used = false; - diff --git a/TCP/ChatUser.java b/TCP/ChatUser.java deleted file mode 100755 index 763eecf..0000000 --- a/TCP/ChatUser.java +++ /dev/null @@ -1,56 +0,0 @@ -//Verteilte Anwendungen - Uebungsblatt 4 -//zu Aufgabe 1a/b: User für TCP IRC Server -// -import java.io.*; -import java.net.*; - -public class ChatUser -{ - private String userName; - private Socket userSocket; - - public ChatUser() - { - userName = "none"; - userSocket = null; - } - - public ChatUser(String cName) - { - userName = cName; - userSocket = null; - } - - public ChatUser(Socket cSocket) - { - userName = "none"; - userSocket = cSocket; - } - - public ChatUser(String cName, Socket cSocket) - { - userName = cName; - userSocket = cSocket; - } - - public void setName(String cName) - { - userName = cName; - } - - public void setSocket(Socket cSocket) - { - userSocket = cSocket; - } - - public Socket getSocket() - { - return userSocket; - } - - public String getName() - { - return userName; - } - -} diff --git a/TCP/Distributor.class b/TCP/Distributor.class deleted file mode 100755 index b4675ac4d60b40997549a09537e11cca63478bdb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5082 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 diff --git a/TCP/Listener.class b/TCP/Listener.class deleted file mode 100755 index aecbc700875d380a46f07d6f10c986de0b266a69..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1557 zcmZuxYf~Fl7=BJj*<`x`3WU;nD{9+ZfT*=MpcIl)jfMuh5v5+26a>7#SVYULVF7MmQeZ2J8 z@@u6HQ+m&&H?Qh7FoUZGUc>7GQy~E-&1dQo;7@_9Azt2@P3;56F(d;*CIyDA;k zvax|z?J?_WydvtNU?)PW!DtAK>`Fhv2C-+d{q9E;Z2fev<0Lk!P;HwSsCttUHq&mG z9bbB0;QEq)*y2Y7t<02oMA;i?k^Dm|*HQYJ2;m#|Hw<&*z zrwt6#7RcldA#(Wx#BxU%+B!mfEB7m69h^DD@FBDVByzI{NWP@4z`Ij z$7bahj2vNf>kwn(=QlO3dw%{!RdNB$Jk>C;RjUN1v1mysb%5VFY^GZvOr z#26*lpy4{-)fSy!FP%P diff --git a/TCP/README.md b/TCP/README.md new file mode 100644 index 0000000..53a1bd1 --- /dev/null +++ b/TCP/README.md @@ -0,0 +1,13 @@ +# secure-chat + +A TCP based multi threaded chat application, purposed to provide end-to-end RSA encryption. + +to run : + + +1. install maven build tool +2. change the pom xml config for runtime environments +3. build - 'mvn clean install' +4. running - 'mvn exec:java' + +PS : first run the server, then client. diff --git a/TCP/TCPClient/pom.xml b/TCP/TCPClient/pom.xml new file mode 100644 index 0000000..9843ebe --- /dev/null +++ b/TCP/TCPClient/pom.xml @@ -0,0 +1,12 @@ + + + 4.0.0 + + com.secure.chat + chat-client + 1.0-SNAPSHOT + + + \ No newline at end of file diff --git a/TCP/TCPClient/src/main/java/com/secure/client/Client.java b/TCP/TCPClient/src/main/java/com/secure/client/Client.java new file mode 100644 index 0000000..b061e03 --- /dev/null +++ b/TCP/TCPClient/src/main/java/com/secure/client/Client.java @@ -0,0 +1,133 @@ +package com.secure.client; + +import java.io.*; +import java.net.Socket; +import java.net.UnknownHostException; + +/** + * Created by goodbytes on 9/24/2016. + */ +public class Client { + private Socket clientSocket; + private InputStream in; + private OutputStream out; + private BufferedReader stdin; + + public Client( String hostname, int hostport ) + { + try { + clientSocket = new Socket( hostname, hostport ); + in = clientSocket.getInputStream(); + out = clientSocket.getOutputStream(); + stdin = new BufferedReader( new InputStreamReader(System.in) ); + } catch (UnknownHostException e) { + System.out.println("Sock:" + e.getMessage()); + } catch (IOException e) { + System.out.println("IO:" + e.getMessage()); + } + } + + private Socket getSocket() + { + return clientSocket; + } + + private void close(Socket cSocket) + { + try { + cSocket.close(); + } catch (IOException e) { + System.out.println("IO :" + e.getMessage()); + } + } + + private void chat() + { + try { + //int bufSize = 1024; + //BufferedInputStream inBuf = new BufferedInputStream( in, bufSize ); + //BufferedOutputStream outBuf = new BufferedOutputStream( out, bufSize ); + + System.out.print( ">" ); + String message = ""; + boolean on = true; + while( on == true ) + { + message = stdin.readLine() + '\n'; + if( message.equals("quit\n") ) + { + message = "QUIT\n"; + on = false; + } + out.write( message.getBytes() ); + out.flush(); + message = ""; + //inBuf.close(); + //outBuf.close(); + } + System.out.println( "closing the Socket..." ); + clientSocket.close(); + + } catch (UnknownHostException e) { + System.out.println("Sock:" + e.getMessage()); + close(clientSocket); + } catch (EOFException e) { + System.out.println("EOF:" + e.getMessage()); + close(clientSocket); + } catch (IOException e) { + System.out.println("IO:" + e.getMessage()); + close(clientSocket); + } + } + + private Thread createHandler(final Socket aClientSocket) { + Thread handler = new Thread(new Runnable() { + public void run() { + try { + InputStream in = aClientSocket.getInputStream(); + OutputStream out = aClientSocket.getOutputStream(); + int c; + String reply = ""; + boolean on = true; + while( on == true ) + { + while( (c = in.read()) != -1 && ( (char)c != '\n' ) && ( (char)c != '\r' ) ) { + reply += (char)c; + } + if( !reply.equals("") && !reply.equals("\n") ) { + System.out.printf( "\n<%s\n>", reply ); + } + if( reply.indexOf("QUIT") > 5 ) { + on = false; + } + reply = ""; + } + System.out.println("Closing client socket"); + aClientSocket.close(); + + } catch (EOFException e) { + System.out.println("EOF:" + e.getMessage()); + close(aClientSocket); + } catch (IOException e) { + System.out.println("IO:" + e.getMessage()); + close(aClientSocket); + } + } + }); + return handler; + } + + public static void main( String args[] ) + { + if( args.length != 2 ) + { + System.out.println( "Usage: TCPClient hostname port" ); + System.exit(1); + } + + Client myClient = new Client( args[0], Integer.parseInt(args[1]) ); + Thread myHandler = myClient.createHandler( myClient.getSocket() ); + myHandler.start(); + myClient.chat(); + } +} diff --git a/TCP/TCPServer/pom.xml b/TCP/TCPServer/pom.xml new file mode 100644 index 0000000..6d42a2b --- /dev/null +++ b/TCP/TCPServer/pom.xml @@ -0,0 +1,12 @@ + + + 4.0.0 + + com.secure.chat + chat-server + 1.0-SNAPSHOT + + + \ No newline at end of file diff --git a/TCP/TCPServer/src/main/java/com/secure/server/Distributor.java b/TCP/TCPServer/src/main/java/com/secure/server/Distributor.java new file mode 100644 index 0000000..30dee4d --- /dev/null +++ b/TCP/TCPServer/src/main/java/com/secure/server/Distributor.java @@ -0,0 +1,198 @@ +package com.secure.server; + +import java.io.IOException; +import java.io.OutputStream; +import java.net.Socket; +import java.util.StringTokenizer; +import java.util.Vector; + +/** + * Created by bhegde on 24-09-2016. + */ +public class Distributor extends Thread +{ + private Vector dClients = new Vector(); + private Vector dUsers = new Vector(); + private Vector dMessages = new Vector(); + private int anzRegistered = 0; + + public synchronized void addClient( Socket aClientSocket ) + { + dClients.add( aClientSocket ); + dUsers.add( "noname" ); + System.out.printf("reg:%2d all:%2d # %s/%d # new Client connected\n", anzRegistered, dUsers.size(), aClientSocket.getInetAddress().getHostAddress(), aClientSocket.getPort()); + } + + public synchronized void delClient( Socket aClientSocket ) + { + int i = dClients.indexOf( aClientSocket ); + if (i != -1) + { + String tmpName = (String)dUsers.get(i); + String message = "SERVER: " + tmpName + " QUIT\n"; + if( !tmpName.equals("noname") ) + anzRegistered--; + dClients.removeElementAt( i ); + dUsers.removeElementAt( i ); + sendInfo( aClientSocket, message ); + try { + aClientSocket.close( ); + } catch(IOException exception) { + System.err.println("IO: " + exception.getMessage()); + close( aClientSocket ); + } + } + } + + private void close(Socket cSocket) + { + try { + cSocket.close(); + } catch (IOException e) { + System.out.println("IO :" + e.getMessage()); + } + } + + public synchronized void sendInfo( Socket aClientSocket, String aMessage) + { + try { + OutputStream out = aClientSocket.getOutputStream( ); + out.write( aMessage.getBytes() ); + out.flush( ); + } catch(IOException exception) { + System.err.println("IO: " + exception.getMessage()); + delClient( aClientSocket ); + } + } + + private synchronized void setUsername( Socket aClientSocket, String aClientName ) + { + String message = ""; + if( aClientName.length() > 1 ) + { + int i = dClients.indexOf( aClientSocket ); + if( i != -1 ) + { + dUsers.set( i, aClientName ); + message = "SERVER: " + aClientName + " USER\n"; + } + anzRegistered++; + } + else + message = "SERVER: USERNAME: '" + aClientName + "' is to short!\n"; + sendInfo( aClientSocket, message ); + } + + private synchronized void showUsers( Socket aClientSocket ) + { + String message = ""; + int i = dClients.indexOf( aClientSocket ); + String tmpName = (String)dUsers.get(i); + if( !tmpName.equals("noname") ) + { + message = "SERVER: " + (String)dUsers.get(i) + " USERS: "; + for( i=0 ; i < dUsers.size() ; i++ ) + { + message += (String)dUsers.get(i); + if( i < (dUsers.size()-1) ) + message += ", "; + } + message += "\n"; + } + else + message = "SERVER: You are not registered" + "\n"; + sendInfo( aClientSocket, message ); + } + + private synchronized void sendMessage( Socket aClientSocket, String aMessage ) + { + String message = ""; + int i = dClients.indexOf( aClientSocket ); + String tmpName = (String)dUsers.get(i); + if( !tmpName.equals("noname") ) + { + message = (String)dUsers.get(i) + ": " + aMessage + "\n\r"; + dMessages.add( message ); + } + else + { + message = "SERVER: You are not registered" + "\n"; + sendInfo( aClientSocket, message ); + } + } + + public synchronized void parseMessage( Socket aClientSocket, String aMessage ) + { + int i = dClients.indexOf( aClientSocket ); + String command = ""; + String option = ""; + StringTokenizer tokenizer = new StringTokenizer( aMessage ); + + if( tokenizer.hasMoreTokens() ) + command = tokenizer.nextToken( ); + + if( tokenizer.hasMoreTokens() ) + option += tokenizer.nextToken( ); + while( tokenizer.hasMoreTokens() ) + option += " " + tokenizer.nextToken( ); + + if( command.equals("USER") ) + { + setUsername( aClientSocket, option ); + System.out.printf("reg:%2d all:%2d # %s/%d # %s: User '%s' added\n", anzRegistered, dUsers.size(), aClientSocket.getInetAddress().getHostAddress(), aClientSocket.getPort(), (String)dUsers.get(i), option); + } + else if( command.equals("USERS") ) + { + showUsers( aClientSocket ); + System.out.printf("reg:%2d all:%2d # %s/%d # %s: Userlist requested\n", anzRegistered, dUsers.size(), aClientSocket.getInetAddress().getHostAddress(), aClientSocket.getPort(), (String)dUsers.get(i)); + } + else if( command.equals("PRIVMSG") ) + { + sendMessage( aClientSocket, option ); + System.out.printf("reg:%2d all:%2d # %s/%d # %s: Message '%s'\n", anzRegistered, dUsers.size(), aClientSocket.getInetAddress().getHostAddress(), aClientSocket.getPort(), (String)dUsers.get(i), option); + } + else if( command.equals("QUIT") ) + { + delClient( aClientSocket ); + System.out.printf("reg:%2d all:%2d # %s/%d # %s: Quit from Chat\n", anzRegistered, dUsers.size(), aClientSocket.getInetAddress().getHostAddress(), aClientSocket.getPort(), (String)dUsers.get(i)); + } + else + { + String message = "SERVER: Unknown Command: " + command + "\n"; + sendInfo( aClientSocket, message ); + System.out.printf("reg:%2d all:%2d # %s/%d # %s: Unknown Command '%s'\n", anzRegistered, dUsers.size(), aClientSocket.getInetAddress().getHostAddress(), aClientSocket.getPort(), (String)dUsers.get(i), command); + } + notify( ); + } + + private synchronized String getNextMessage() throws InterruptedException + { + while( dMessages.size() == 0 ) + wait( ); + String message = (String)dMessages.get( 0 ); + dMessages.removeElementAt( 0 ); + return message; + } + + private synchronized void send2Clients( String aMessage ) + { + for( int i=0 ; i < dClients.size() ; i++ ) + { + Socket socket = (Socket)dClients.get(i); + sendInfo( socket, aMessage ); + } + } + + public void run() + { + try { + while( true ) + { + String message = getNextMessage(); + send2Clients(message); + } + } catch (InterruptedException ie) { + // Thread interrupted. Do nothing + } + } +} diff --git a/TCP/TCPServer/src/main/java/com/secure/server/Listener.java b/TCP/TCPServer/src/main/java/com/secure/server/Listener.java new file mode 100644 index 0000000..44eb9fd --- /dev/null +++ b/TCP/TCPServer/src/main/java/com/secure/server/Listener.java @@ -0,0 +1,43 @@ +package com.secure.server; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.net.Socket; + +/** + * Created by bhegde on 24-09-2016. + */ +public class Listener extends Thread +{ + private Socket lSocket; + private Distributor lDistributor; + private BufferedReader lSocketReader; + + public Listener(Socket aSocket, Distributor aDistributor) throws IOException + { + lSocket = aSocket; + lSocketReader = new BufferedReader( new InputStreamReader( lSocket.getInputStream() ) ); + lDistributor = aDistributor; + } + + public void run() + { + try { + while( !isInterrupted() ) + { + String message = lSocketReader.readLine( ); + if( message == null ) + break; + lDistributor.parseMessage( lSocket, message ); + } + } catch(IOException exception) { + System.err.println("IO: " + exception.getMessage()); + lDistributor.delClient( lSocket ); + } catch(ArrayIndexOutOfBoundsException exception) { + System.err.println("IO: " + exception.getMessage()); + lDistributor.delClient( lSocket ); + } + lDistributor.delClient( lSocket ); + } +} \ No newline at end of file diff --git a/TCP/TCPServer/src/main/java/com/secure/server/Server.java b/TCP/TCPServer/src/main/java/com/secure/server/Server.java new file mode 100644 index 0000000..cb615ca --- /dev/null +++ b/TCP/TCPServer/src/main/java/com/secure/server/Server.java @@ -0,0 +1,42 @@ +package com.secure.server; + +import java.io.*; +import java.net.*; + +/** + * Created by goodbytes on 9/24/2016. + */ +public class Server { + public static void main( String[] args ) throws IOException + { + if( args.length != 1 ) + { + System.out.println( "Usage: ChatTCPServer " ); + System.exit(1); + } + int port = Integer.parseInt(args[0]); + + ServerSocket myServerSocket = new ServerSocket( port ); + System.out.println( "Server startet on " + myServerSocket.getInetAddress() + ":" + myServerSocket.getLocalPort()); + + Distributor myDistributor = new Distributor( ); + myDistributor.start( ); + + while( true ) + { + Socket clientSocket = myServerSocket.accept( ); + Listener myListener = new Listener( clientSocket, myDistributor ); + myDistributor.addClient( clientSocket ); + myListener.start( ); + } + } +} + + + + + +// private ChatUser[] Users = new ChatUser[20]; +// private int anzUser = 0; +// private int aktUser = 0; +// private boolean used = false; diff --git a/TCP/TCPServer/src/main/java/com/secure/server/User.java b/TCP/TCPServer/src/main/java/com/secure/server/User.java new file mode 100644 index 0000000..1d5c2b5 --- /dev/null +++ b/TCP/TCPServer/src/main/java/com/secure/server/User.java @@ -0,0 +1,55 @@ +package com.secure.server; + +import java.net.Socket; + +/** + * Created by goodbytes on 9/24/2016. + */ +public class User { + private String userName; + private Socket userSocket; + + public User() + { + userName = "none"; + userSocket = null; + } + + public User(String cName) + { + userName = cName; + userSocket = null; + } + + public User(Socket cSocket) + { + userName = "none"; + userSocket = cSocket; + } + + public User(String cName, Socket cSocket) + { + userName = cName; + userSocket = cSocket; + } + + public void setName(String cName) + { + userName = cName; + } + + public void setSocket(Socket cSocket) + { + userSocket = cSocket; + } + + public Socket getSocket() + { + return userSocket; + } + + public String getName() + { + return userName; + } +} From 6a7c6c22ffb1c706047d166ac2e45f296283daac Mon Sep 17 00:00:00 2001 From: Bhargava Balachandra Hegde Date: Sat, 24 Sep 2016 17:05:53 +0530 Subject: [PATCH 2/2] remove readme --- TCP/README.md | 13 ------------- 1 file changed, 13 deletions(-) delete mode 100644 TCP/README.md diff --git a/TCP/README.md b/TCP/README.md deleted file mode 100644 index 53a1bd1..0000000 --- a/TCP/README.md +++ /dev/null @@ -1,13 +0,0 @@ -# secure-chat - -A TCP based multi threaded chat application, purposed to provide end-to-end RSA encryption. - -to run : - - -1. install maven build tool -2. change the pom xml config for runtime environments -3. build - 'mvn clean install' -4. running - 'mvn exec:java' - -PS : first run the server, then client.