• Post Reply Bookmark Topic Watch Topic
  • New Topic

problems with my server  RSS feed

 
Chris Dancy
Ranch Hand
Posts: 136
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
I have a problem with this small server im writing. It accepts one person, but when it accpets another person, nothing happends. Its a chat client. The first person to login gets in and is able to type text. The next person isint able to do anything.

here is the code, I think it has something to do with the threading.
import java.io.*;
import java.net.*;
public class SimpleThreadedServer3
{
static final int portNumber = 5095;
private ServerSocket ss;
private InetAddress addr;
private PrintWriter writer;
private String messageIn,messageOut;
private BufferedReader reader;
public static void main(String [] args)
{
new SimpleThreadedServer3().initiateStartUp();
}
public void initiateStartUp()
{
try{
addr = InetAddress.getLocalHost();

System.out.println("Creating Server Socket at:"+portNumber+" . . . ");
System.out.println("At Host:"+ addr.getHostName()+" . . .");
System.out.println("At Address:"+ addr.getHostAddress()+" . . .");
ss = new ServerSocket(portNumber);

System.out.println("System Online ...");
while(true)
{
Socket sock = ss.accept();
writer = new PrintWriter(sock.getOutputStream());
System.out.println(sock+ "I am a white man");
String m = "stinky";
writer.println(m);

new Thread(new ClientHandler(sock)).start();
}

}catch(IOException e)
{
System.out.println(e);
}
}
class ClientHandler implements Runnable
{
private Socket sock;
public ClientHandler(Socket s)
{
try{
sock = s;

reader = new BufferedReader(new InputStreamReader(sock.getInputStream()));
System.out.println(reader+"stinky bear");
String messageIn;
while((messageIn = reader.readLine())!=null)
{
System.out.println(messageIn);
writer.println(messageIn);
}
}catch(Exception e)
{
System.out.println(e);
}
}
public void run()
{
String messageOut;
try{
while((messageOut = reader.readLine())!= null)
{
System.out.println(messageOut);
sendToAll(messageOut);
}
}catch(Exception e)
{
System.out.println(e);
}
}
}
public void sendToAll(String messageOut)
{
try{
writer.println(messageIn);
writer.println(messageOut);
writer.flush();
}catch(Exception e)
{
System.out.println(e);
}
}
}



can anyone help me out?
 
Joe Ess
Bartender
Posts: 9406
12
Linux Mac OS X Windows
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
This one had me going for a while. Then I noticed your constructor for ClientHandler has a while loop in it. The constructor never returns, so you never start up the ClientHandler thread so your server never gets around to listening to the second request.
Use Code Tags and indent your code. It will make these kinds of problems easier to spot.
[ April 07, 2006: Message edited by: Joe Ess ]
 
With a little knowledge, a cast iron skillet is non-stick and lasts a lifetime.
  • Post Reply Bookmark Topic Watch Topic
  • New Topic
Boost this thread!