안드로이드 개발 질문/답변
(글 수 45,052)
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);
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 안에서 구현 할 떄는 아무 이상이 없는데..
클라이언트를 받고 다시 대기하려고 저렇게 구현했는데.. 어디가 문제인지 잘 모르겠습니다. ㅠㅠ
감사합니다~
즐거운 하루 보내세요~^^