Handle multiple connections on server side

Hi,
I am trying to enable many clients to connect to my server at the same time.
So far what i have done is to create a serverSocket named theSocket
and accept incomming connection : theSocket.accept().
Each time a connection is established my server create a new Thread to deal with that client: which means one client = one thread running on the Server. But if i have Many clients like 1000...
that would mean 1000 Threads running on the server and i think this is weak in terms of performance in server side.
Any idea about how to improve this?
thanks
seb

I think you need to ues Java NIO

Similar Messages

  • URGENT:Handle multiple connection in a multithreaded server.

    I hava a multithreaded server where it can handle multiple connection.
    The program works in this way. First, it will wait for connection. Once it accepts a connection, it will pass the socket to a thread class which will in turn process the connection. Then, the server will go back to the infinite loop to wait for new connection.
    Since I am not very familiar on using thread, I would like to post the following questions:
    1) Let say that my server can handle multiple connections. This is to cater for the different requests from the client. For instance, the client may make one connection for chatting and another connection for sending file(something like we have in Yahoo Messanger). So, at the server side, how can I differentiate between the connection for CHAT and the connection for SEND FILE so that I can handle the requests separately. It means I can save the file sent from client and display the chat message in the JTextArea?
    2) How can I stop the server, clean up the thread and start the server again for waiting new connection? Currently, I can just start my server once.
    For reference,following are parts of my program:
    public void listenSocket(){
    try{
    server = new ServerSocket(5000);
    } catch(IOException e) {
    System.out.println("Failed to listen on port 5000");
    System.exit(0);
    try{
    while(true){
    server1frame sframe=null;
    ChatHandler handler;
    handler = new ChatHandler(sframe,server.accept(),jTextArea1,jTextField1,jFileChooser1);
    handler.start();
    } catch(IOException e) {
    System.out.println("Accept failed:5000");
    System.exit(0);
    //to close the connection as the final steps before program exit.
    } finally {
    try{
    server.close();
    } catch (IOException ioe) {
    ioe.printStackTrace();
    public void run() {
    out.println("Connection Established");
    out.flush();
    try {
    String line;
         while(!(line =in.readLine()).equalsIgnoreCase("QUIT")) {
    if(line.startsWith("CLIENT"))
    jTextArea1.append("\n"+line);
    else if(line.startsWith("Connecting")) {
    jTextArea1.append("\n"+line);
    else if (line.startsWith("Finish")) {
    JOptionPane.showMessageDialog(sframe,"File has finished downloading",
    "File Download Complete",JOptionPane.INFORMATION_MESSAGE);
    else {
    BufferedWriter fout = new BufferedWriter(
    new FileWriter("e:/num1.txt",true));
    fout.write(line);
    fout.newLine();
    fout.flush(); }
         } catch(IOException ioe) {
         ioe.printStackTrace();
         } finally {
         try {
              in.close();
              socket.close();
         } catch(IOException ioe){
    System.out.println("Fail to close connection.");

    1) Let say that my server can handle multiple
    connections. This is to cater for the different
    requests from the client. For instance, the client may
    make one connection for chatting and another
    connection for sending file(something like we have in
    Yahoo Messanger). So, at the server side, how can I
    differentiate between the connection for CHAT and the
    connection for SEND FILE so that I can handle the
    requests separately. It means I can save the file sent
    from client and display the chat message in the
    JTextArea?Either your server listens on two different ports for two different protocolls, (then you would a server thread for each port) or you accept connections for both protocolls on both ports, and have the client state what protocoll it is using :
    eg:
    accept Connection - start new Thread - read first line - depending on protocoll pass protocoll object (CHAT, FTP) to run method
    There is an example for a simple protocoll at : http://java.sun.com/docs/books/tutorial/networking/sockets/clientServer.html
    2) How can I stop the server, clean up the thread and
    start the server again for waiting new connection?
    Currently, I can just start my server once.You normally start servers only once. It should then be up and listening for it's entire lifetime. Restarting a server should only be needed if it hangs or crashes.

  • How to handle multiple connection or user with l2cap

    hi friends,
    I need your help please a.s.a.p
    how to handle multiple connection with l2cap protocol in j2me
    sorry,
    I'm a new programmer in j2me
    thanks all...

    Please stick with the original thread http://forum.java.sun.com/thread.jspa?threadID=5200413&tstart=0
    Cross-posting is very rude, and JSch has nothing to do with JSSE, directly. It is an SSH2 API. It does (AFAIK) use some parts of JSSE, but those parts are definately not your problem.
    You already have answers in the other thread.

  • Need solution for opening multiple connection to server in parallel

    Hi..
    I have used URL and URLConnectin classes to open connection to server,
    and i used URLConnection.getInputStream( ) to download HTML pages.
    Now my requirement is to open more than one connecton to single HTML document and download the file in parallel.
    for example, if the HTML file size is 60KB..then i open three connection and
    connection 1 downloads first 20KB
    connection 2 downloads second 20KB
    connection 3 downloads final 20KB
    all the above should be done in parallel....by threading or else..
    first of all i want to know is it possible to do the above in java?
    anybody having solution for the above requirement?
    venu

    hi,
    i too have the same problem
    actually i am designing a download manager ,and had the same problem
    that how to put multiple threads for doing it ,,,,
    have u got solution for it..
    if so please help me..
    my mail id is [email protected]
    i want help in designing the download manager
    can any one help me out plzzzzzzzzzzzzzz
    bye

  • Java Stored Procedure / connection JDBC / Server Side / Client Side

    Hi,
    I would like to know if we can know at the runtime with a JDBC api if the stored procedure is running in client side or in server side ?
    THANKS

    You wrote
    "Java stored procedures -- by definition - are stored in the 8i rdbms. !!"
    From the Oracle8i Java Stored Procedures Developer's Guide
    Release 8.1.5
    A64686-01
    "If you create Java class files on the client side, you can use loadjava to upload them into the RDBMS. Alternatively, you can upload Java source files and let the Aurora JVM compile them. In most cases, it is best to compile and debug programs on the client side, then upload the class files for final testing within the RDBMS"
    This means that you can create shared classes that are used on both the client and server side. The source does not need to reside within the server (according to their documentation). Please also note the following from the Oracle8i JDBC Developer's Guide and Reference Release 8.1.5 A64685-01 for using the getConnection() method on the server:
    "If you connect to the database with the DriverManager.getConnection() method, then use the connect string jdbc:oracle:kprb:. For example:
    DriverManager.getConnection("jdbc:oracle:kprb:");
    Note that you could include a user name and password in the string, but because you are connecting from the server, they would be ignored."
    So if you're coding a shared class that is to run on both the client and server side, you might do something like this:
    Connection conn =
    DriverManager.getConnection(
    System.getProperty("oracle.server.version") == null
    ? "jdbc:oracle:thin:@hostname:1521:ORCL"
    : "jdbc:oracle:kprb:"),
    "youruserid","yourpassword");
    As stated earlier, the userid and password are supposedly ignored for server connections retrieved in this manner. I haven't tried this yet, but it is documented by Oracle.
    Regards,
    Steve
    null

  • IPad Mail Creating Multiple Connections with Server

    I am trying to connect with my iPad Mail Client via POP3 to an externally hosted e-mail server. My problem is that the iPad apparently is trying to enable multiple connections to the e-mail server and the protection on the server then bans my IP as a suspected DOS attack. How can the iPad client be adjusted to disable it from making multiple connections?
    And, is anyone else having this problem?

    I found the solution. Fetch is set automatically and that is my problem. Need to change it to manual

  • How to handle multiple connection through JCO

    Hello JCo Experts,
    My requirement is as follows:
    > I need to create a Web Dynpro Java Application
    > I have multiple users (different Users on SAP System).
    > I need to execute BAPI/Module Functions through these multiple users.
    Example:
    Users: A and B
    User A has logged in from a remote location
    User B has logged in from a another remote location
    both users have logged in through SAP system Login Ids
    Two JCo Connections should be created and all the request from User A must use Connection A and request from B must use Connection B.
    > The connection should be created at first time when user login first time.
    How can I handle this scenario through JCo or other way. I have multiple BAPI/ModuelFunction which I need to execute but with User specific.
    waiting for positive response.

    Dear Shiv,
    Please need to look into [How to Configure the JCo Destination Settings|http://www.sdn.sap.com/irj/scn/index?rid=/library/uuid/3103eb90-0201-0010-71af-be6f4a6f61d1]
    http://wiki.sdn.sap.com/wiki/display/Snippets/DynamicJCOHandling-Creation,Updationetc
    Best Regards
    Arun Jaiswal

  • Multiple connection to server.

    Hi
    I am trying to write a client server application using sockets. Everything works fine when I connect with a client but the server will only allow one connection and I need to have many more. Please help. Here is my code.
    import java.util.*;
    import java.io.*;
    import java.net.*;
    public class DictionaryServer extends Thread
        private ServerSocket serverSocket = null;
        private Socket clientSocket = null;
        private PrintWriter out;
        private BufferedReader in;
        private DictionaryProtocol dictProt;
        private String output;
        private String input;
         private boolean stopFlag = true;
         * Default constructor for DictionaryServer initializes ServerSocket
         * and ClientSocket and also initializes the PrintWriter and
         * BufferedReader objects to handle recieving text from the client.
        public DictionaryServer()
              super("DictionaryServer");
            try
                serverSocket = new ServerSocket(4343);
            catch (IOException e)
                System.out.println("Error opening port");
                System.exit(1);
            try
                clientSocket = serverSocket.accept();
            catch (IOException ex)
               System.err.println("Acception Failed");
            try
                out = new PrintWriter(clientSocket.getOutputStream(), true);
                in = new BufferedReader(new InputStreamReader(clientSocket.
                getInputStream()));
            catch(IOException exxs)
         * Run method for DictionaryServer.
        public void run()
             while(stopFlag)
                    startProcess();
         * Starts the process of serving wuestions to the client and
         * processing the replies.
        private void startProcess()
            dictProt = new DictionaryProtocol();
            output = dictProt.processInput(null);
            out.println(output);
            try
                while ((input = in.readLine()) != null)
                    output = dictProt.processInput(input);
                    out.println(output);
                        continue;
                   close();
            catch(IOException e) { stopFlag = false; }
              catch(Exception e) { stopFlag = false; }
         * Closes the streams.
         * @throws IOException
        private void close() throws IOException
            out.close();
            in.close();
            clientSocket.close();
            serverSocket.close();
         * Entry point for DictionaryServer.
         * @param args String[]
        public static void main(String[] args)
              new DictionaryServer();
    }

    I am still having trouble working out where this
    statement should go. Thanksin your code you're creating a single thread that receives a connection... you must have a thread for each connection received, so receive connections on the main thread (main method), and handle them in DictionaryServer threads

  • IChat AV 3.0.1 (v392) Handling Multiple Connections

    I currently run AdiumX to connect to my Yahoo! & AIM instant messenger services to talk with Mac & Windows users. I also run iChat AV to connect to my .Mac instant messenger service for using my iSight since Adium doesn't work with video yet.
    I would like to be able to use all my IM names in iChat AV (connected at the same time) and I'm willing to drop Yahoo! for Google Talk if needed since Yahoo! IM isn't supported through iChat but GTalk is.

    Technically you can be logged in all of the following via iChat at the same time via iChat:
    AIM (Mac account)
    Via your primary buddy list in iChat
    Yahoo
    MSN
    Jabber
    AIM (AIM Account)
    all via your Jabber buddy list in iChat
    and
    Bonjour
    via your Bonjour buddy list in iChat
    So technically you could have up to 3 separate windows running all in iChat. There is no way in iChat to have all services appear in one window at this time.
    Since there are some problems with the transports (they allow the connection from Jabber to Yahoo/MSN,etc) I'd recommend staying with Adium until the kinks get worked out. Just my two cents for now!
    I personally use iChat for my AIM account so I can access the video features, and I use Adium to access all of the other accounts that I have. I have Adium metal theme so it fit's right in with the iChat theme, so, yes, basically, I'm running 2 programs too!)
    Hope this helps!

  • How to handle multiple connection with ssh using JSCH Client?

    Hi,
    Can anybody help me regarding the topic said above?
    Thanks in advance.

    Use this forum to discuss general topics related to the Java programming language.
    I don't even know what JSCH is, let alone would kno whow to provide product support for it.

  • How to handle Back button, Browser Refresh problem at server side.

    Hi Friends,
    How to handle Back button, Browser Refresh problem at server side in java?.
    I am able to trace that,
    request.getHeader("ACCEPT") is returning value- */*
    when the browser was refreshed and returning different MIME types
    for all other actions from browser.
    I have doubt, will the above solution works always for all servers,browsers?.
    Please also specify any solution to handle back button at server side?.
    Thanks in Advance.
    Venkat..

    I'm sorry I don't think tht's the right solution for
    the above question....
    We must be aware that whatever scripting methdologies
    we either javascript/vbscript would executed @
    client(browser) side not @ server side....
    Dud If U get a good solution keep me updated.....
    THANKS & REGARDS,
    RAHULMy dear friend ...
    the bad news is that u simply cant disable or add any listener to the back button of the browser.
    When u hit the back button of ur browser the URL gets re-executed. So in case u have a JSP then the history.forward() is the best solution. [only if the page doesnt get expired similar to secure https sites]
    Now dont say that user can have javascript disabled ...those users will have a pretty touch time browsing websites since javascripts r used extensively by almost all websites.
    But in case u have an action.do or servlet call then u need to manage it using a session variable since the request will be sent to the server rather than client.
    For multiple form submittion issues read the following article in javaworld...
    Client vs. server solutions
    Different solutions can solve this multiple form submission situation. Some transactional sites simply warn the user to wait for a response after submitting and not to submit twice. More sophisticated solutions involve either client scripting or server programming.
    In the client-only strategy, a flag is set on the first submission, and, from then on, the submit button is disabled based on this flag. While appropriate in some situations, this strategy is more or less browser dependent and not as dependable as server solutions.
    For a server-based solution, the Synchronizer Token pattern (from Core J2EE Patterns) can be applied, which requires minimal contribution from the client side. The basic idea is to set a token in a session variable before returning a transactional page to the client. This page carries the token inside a hidden field. Upon submission, request processing first tests for the presence of a valid token in the request parameter by comparing it with the one registered in the session. If the token is valid, processing can continue normally, otherwise an alternate course of action is taken. After testing, the token resets to null to prevent subsequent submissions until a new token is saved in the session, which must be done at the appropriate time based on the desired application flow of control.
    for more details refer :
    http://www.javaworld.com/javaworld/javatips/jw-javatip136.html
    Hope u got the idea.
    FYI I have been using both these ideas in my credit card payment gateway project. This concept has worked really well.

  • Users have multiple AFP connections on server?

    Our server is running 10.6.7 and in Server Admin under AFP connection we are noticing users with multiple connections to server.  The settings are enabled to "disconnect users after they are idle" for 60 minutes and also "allow to sleep for 4 hours" checked.  I have 2 other servers with the same settings that average 60-80 connections but this server continues to average 250+ connections, many of which are multiple users from same IP address.  Does anyone have ideas as to why server isn't reseting connections?

    Who says the server isn't resetting connections? How do you know these connections are not active?
    It's not uncommon for one user to have multiple connections to a server, depending on your sharepoint configuration. Each shared resource will consume one connection for each user. This means that if your users' home directories are on the server, as well as a group sharepoint and a public share/dropbox, then each user would have three connections. Does that cover your usage?

  • Problems with multiple connections in the same transaction

    Hi all !
              I'm have two questions regarding the way weblogic handles multiple
              connections.
              1) first, I don't understand why weblogic always create a new Managed
              Connection when I'm asking for 2 connection handles on the same connection
              factory and with the same connectionRequestInfo. Isn't it supposed to share
              connections ?
              For instance, the following snippet of code results in the creation of 2
              managed connections:
              ConnHandle conn1 = myCF.getConnection(myRequInfo);
              ConnHandle conn2 = myCF.getConnection(myRequInfo);
              The class corresponding to myRequInfo does implement the equals and hash
              method, so that weblogic's connection manager could use them to check that
              the queried connections are the same, and thus could share a single
              ManagedConnection between multiple connection handles. Apparantly it does
              not do that...
              2) OK, I just let weblogic create the 2 managed connections, but... My use
              of the connections is as part of a transaction. Here is what happens:
              ConnHandle conn1 = myCF.getConnection(myRequInfo);
              // a new managedConn1 is instanciated. the following happens (just a
              description)
              // xar1 = managedConn1.getXAResource()
              // xar1.start(NOFLAGS)
              // I use the conn1 handle
              conn1.close();
              //xar1.end(SUSPEND)
              ConnHandle conn2 = myCF.getConnection(myRequiInfo);
              // a new managed connection managedConn2 is instanciated.
              // xar2 = managedConn2.getXAResource();
              // xar2.start(RESUME)
              // I use conn2 handle
              conn2.close();
              // xar2.end(SUSPEND);
              // my bean returns from the remote invocation
              // the client of the bean asks to commit (using UerTransaction.commit on the
              client side)
              // xar2.end(SUCCESS)
              // xar2.commit(onePhase=true);
              // managedConn2.cleanup();
              And that's all. So, as one can see, managedConn1.cleanup was never called.
              When looking in the weblogic console, I can see that I have one connection
              with 0 handle and one with 1 handle, deemed as still being in a transaction.
              So, the conenction manager apparantly loses a managed connection during the
              transaction. And it's very very bad because after a couple of transactions,
              I'm running out of managed connections (I had set a limit of 10).
              Any one has seen such a weird behavior ? Is this a problem on my side, or
              weblogic's ? Thanks for your help.
              Sylvain
              

              I ran another test. This time I have a bean that makes use of a connector
              once per method invocation. The bean method invoked is "sayHello" and it
              gets a connection to the EIS, perform an operation on it and release it. The
              connector I developed uses XA transactions.
              My test client just calls 3 times myBean.sayHello().
              I can distinguish two cases:
              1) first, the client doesn't do transaction demarcation. In this case, since
              the sayHello method is marked as requiring transaction, the folowing happens
              in the bean:
              // **** first invocation of the bean
              connHandle = myCF.getConnection();
              // managedConn1 is instanciated
              // xar1 = managedConn1.getXAResource()
              // xar1.start(NOFLAGS);
              // managedConn1.getConnection gives a connection handle
              connHandle.doSomeWork();
              connHandle.close()
              // xar1.end(SUCCESS);
              // the bean returns from its invocation
              // xar1.commit(onePhase=true)
              // managedConn1.cleanup()
              // **** second invocation of the bean
              connHandle = myCF.getConnection();
              // managedConnectionFactory.matchManagedConnection is called. It returns the
              managed connection (managedConn1) that is in the passed set
              // xar1 = managedConn1.getXAResource()
              // xar1.start(NOFLAGS);
              // managedConn1.getConnection gives a connection handle
              connHandle.doSomeWork();
              connHandle.close
              // xar1.end(SUCCESS);
              // the bean returns from its invocation
              // xar1.commit(onePhase=true)
              // managedConn1.cleanup()
              // **** third invocation of the bean
              connHandle = myCF.getConnection();
              // managedConnectionFactory.matchManagedConnection is called. It returns the
              managed connection (managedConn1) that is in the passed set
              // xar1 = managedConn1.getXAResource()
              // xar1.start(NOFLAGS);
              // managedConn1.getConnection gives a connection handle
              connHandle.doSomeWork();
              connHandle.close
              // xar1.end(SUCCESS);
              // the bean returns from its invocation
              // xar1.commit(onePhase=true)
              // managedConn1.cleanup()
              2) second case : the client performs transaction demarcation. In that case,
              the connection manager instanciates 3 managed connections, calls start/end
              on each XAResource corresponding to each managed connection, calls commit
              once, but also calls cleanup only once, leaving 2 lost managed connections
              The client looks like this:
              UserTransaction utx = context.lookup("javax/transaction/UserTransaction");
              utx.begin();
              MyBean myBean = ctx.lookup(".......");
              myBean.sayHello();
              myBean.sayHello();
              myBean.sayHello();
              utx.commit();
              on the server the following happens:
              // **** first invocation of the bean
              connHandle = myCF.getConnection();
              // managedConn1 is instanciated
              // xar1 = managedConn1.getXAResource()
              // xar1.start(NOFLAGS);
              // managedConn1.getConnection gives a connection handle
              connHandle.doSomeWork();
              connHandle.close()
              // xar1.end(SUSPEND);
              // the bean returns from its invocation
              // **** second invocation of the bean
              connHandle = myCF.getConnection();
              // managedConn2 is instanciated
              // xar2 = managedConn2.getXAResource()
              // xar1.isSameRM(xar2) is called. returns true
              // xar2.start(RESUME);
              // managedConn2.getConnection gives a connection handle
              connHandle.doSomeWork();
              connHandle.close()
              // xar2.end(SUSPEND);
              // the bean returns from its invocation
              // **** third invocation of the bean
              connHandle = myCF.getConnection();
              // managedConn3 is instanciated
              // xar3 = managedConn3.getXAResource()
              // xar2.isSameRM(xar3) is called. returns true
              // xar3.start(RESUME);
              // managedConn3.getConnection gives a connection handle
              connHandle.doSomeWork();
              connHandle.close()
              // xar3.end(SUSPEND);
              // the bean returns from its invocation
              // the client invokes commit on the UserTransaction
              // xar3.end(SUCCESS);
              // xar3.commit(onephase = true);
              // managedConn3.cleanup();
              And so, managedConn1 and managedConn2 got lost in the way...
              What's more puzzling, it's that when monitoring my connector with the
              console, I can see that there are 3 connections. 2 declared as still having
              one handle used and being in transaction, and one not in transaction and
              with 0 active handle. BUT when monitoring the JTA part of the server, I can
              see that there has been 1 transaction that committed, and no connection is
              "in flight" as the console says. So, on one side the console says 2 managed
              connections are still part of a transaction while on the other it says that
              no transactions are currently in flight.
              Thanks for any kind of help on this very bizarre behavior.
              Sylvain
              

  • AJAX handling multiple responses

    Hi,
    I have a problem in handling multiple responses from server.
    I am sending requests simultaniously (response for the first requset comes sending other request) but i am getting only the response for the last request all previous request responses are lost.
    how to handle thi situation.is there a way to handle?
    pls help me asap.

    since it is for sure using a single connection to the server, it is quite normal
    can't you manke the request sequentialy?

  • Updating form with server-side scripts

    Hi
    For security reasons, we want to do a web service call with only server side scripts. That way we have full control over the access to the wsdl and no problems with the security.
    However, if I try to run the scripts on server-side I get no update of the data in the form... so what to do to solve that problem? Anybody with experience from that?

    To make a small update I've been messing around with various different things to be able to achieve the goal. One of the initial problems was that the Designer actually manages to create two different SOAP addresses, one of them is the correct and secure way and the other one is direct to the data source, which would be an unsecure and blocked route. That changed things a bit when I realized that.
    But still, the problem remains. If I run the script Client-Side, it works but is not an acceptable solution. If I run it Server-Side, it can't read the data and doesn't recognize the call to SOAP.connect()...
    Does anybody have any experience in webb service connection with server side scripts?

Maybe you are looking for

  • Back up iPhone 4 to a folder/DVD?

    Its been a while since I did this and even though my 16GB iPhone 4 is almost full, it would be good to back up my iphone 4 to a folder or somehting where i can burn to a dvd or 2, as back up. My icloud account is only 5GB and it says i should back th

  • What internal hard drive can i use to upgrade the one i have in my 13" MacBook Pro mid 2010 model?

    I have a MacBook Pro 13" mid 2010 model machine. Love it to bits but i want more applications, more documents, more music and more iPad apps backed up, problem is I am running out of space. I want to update the hard drive inside my computer, so is th

  • Financial statement version download/upload

    Hi all, I have the following question concering the financial statement version: I want to bulid up structures and data from one SAP system in another SAP system. Therefore I also like to create the same financial stetement version. Is there a chance

  • SAP gateway connection failed

    Hi All, Due to restructure in DMZ in our network, IP addr of our R3 server is changed from 172.20.x.x to 192.168.x.x. and the original IP is NATted for connections. We can able to access SAPGUI, but RFCs from this server to other systems is not worki

  • Loading external swf issue

    I'm getting this error from my files while testing movie: Error #2044: Unhandled IOErrorEvent:. text=Error #2036: Load Never Completed. there are two swf: container.swf is the loading controller that loads an external swf called "page1.swf". Please f