Server.java



import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
 
public class Server {
    public static final int ServerPort = 9999;
    public static final String ServerIP = "218.236.25.5";

    public static void main(String[] args) {
        // TODO Auto-generated method stub
     
        ServerThread tServer = new ServerThread(ServerPort,ServerIP);
        tServer.start();
    }
}

ServerThread.java

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class ServerThread extends Thread{
    private static int ServerPort; 
    private static String ServerIP; 
    public ServerThread(int port,String ip){
     ServerPort = port;
     ServerIP = ip;
    }
    
    private Socket[] client = new Socket[10];
 private int num;
 @Override 
    public void run() { 
        // TODO Auto-generated method stub
  
        try { 
            System.out.println("S: Connecting..."); 
            ServerSocket serverSocket = new ServerSocket(ServerPort); 
            while (true) { 
             
             try{
             System.out.println("S: Accepting... ");
             
                client[num] = serverSocket.accept();   
                System.out.println("S: Receiving"); 
                
                AcceptThread aThread = new AcceptThread(client[num]);
                
                aThread.start();
                
                ++num;
                } catch (Exception e) { 
                    System.out.println("S: Error"); 
                    
                    client[num].close(); 
                    e.printStackTrace(); 
                } finally { 
                 client[num].close(); 
                    System.out.println("S: Done."); 
                } 
                
            } 
        } catch (Exception e) { 
            System.out.println("S: Error"); 
         
            e.printStackTrace(); 
        } 
    } 
 
}


AcceptThread.java

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class AcceptThread extends Thread{
 private static Socket client;
 
 
 public AcceptThread(Socket socket) {
  client =socket;
  
 }
 
    public void run() { 
        // TODO Auto-generated method stub 
     try{
     
        BufferedReader in = new BufferedReader( 
             
          new InputStreamReader(client.getInputStream())); 
        System.out.println("S: Creating Inputstream"); 
        
        PrintWriter out = new PrintWriter(new BufferedWriter( 
       
                new OutputStreamWriter(client.getOutputStream())),true); 
        
        System.out.println("S: Creating Outputstream"); 
        
        while(true){
         
            String str = in.readLine();   // block
            System.out.println("S: Received: '" + str + "'"); 
            
            out.println("Server Received " + str); 
            
            out.flush();
        }
     } catch (Exception e) { 
            System.out.println("S: Error"); 
            
     //       client.close(); 
            e.printStackTrace(); 
        } finally { 
   //         client.close(); 
            System.out.println("S: Done."); 
        } 
     
    } 
 
}


이렇게 구현을 했는데 AcceptThread 에서 BufferedReader in = new BufferedReader( new InputStreamReader(client.getInputStream()));

이 부분에서 에러가 발생합니다.. AcceptThread 를 ServerThread 안에서 구현 할 떄는 아무 이상이 없는데..

클라이언트를 받고 다시 대기하려고 저렇게 구현했는데.. 어디가 문제인지 잘 모르겠습니다. ㅠㅠ


감사합니다~

즐거운 하루 보내세요~^^