Hi,

accept() blockiert bis sich ein Client anmeldet und gibt dann einen Socket zurück.
Dein Code wartet auf zwei Clients, das erstemal in der if-Abfrage, das zweite mal innerhalb des Anweisungsblock der if-Abfrage.
Die if Abfrage ist also überflüssig, die NullPointerException muss eine andere Ursache haben.
Könnte z.B daran liegen, dass s und c lokale Objekte sind, die vom GarbageCollector gelöscht werden,
wenn der nächste Durchlauf der while Schleife einsetzt. Folgendes sollte also funktionieren:

Code:
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

class Server
implements Runnable
{
   public void run()
   {
      Client c;

      try
      {
         ServerSocket sv = new ServerSocket(4003);
         
         while(true)
         {
            
                c = new Client( sv.accept() );
            
         }
      }
      catch(IOException e)
      {
         System.out.println(e.getMessage());
      }
   }
}
Damit du mehrere Clients bedienen kannst,
muss dein Client-Objekt einen neuen Thread erstellen, sollte also von Thread abgeleitet werden.

Gruß, Dirk