안드로이드 개발 질문/답변
(글 수 45,052)
import java.io.*; import java.net.*; import java.util.logging.Handler;
public class Server extends Thread{
static ServerSocket serverSocket = null;
static Socket socket = null;
private static BufferedReader reader, networkReader;
private static BufferedWriter networkWriter;
static String str, send;
public void run(){
connect();
}
private static Thread sendMessage = new Thread("first"){
public void run(){
System.out.println("sendMessage");
PrintWriter out1 = new PrintWriter(networkWriter, true);
while(true){
try{
str = networkReader.readLine();
if(!str.equals(null)){
System.out.println("Thread1 start");
System.out.println("Output : "+str);
out1.println(str);
System.out.println("Thread1 start2");
out1.flush();
}
}catch(Exception e){}
}
}
};
private static Thread checkMessage = new Thread("second"){
public void run(){
System.out.println("checkMessage");
PrintWriter out2 = new PrintWriter(networkWriter, true);
while(true){
try{
str = networkReader.readLine();
if(!str.equals(null)){
System.out.println("Thread2 start");
System.out.println("Input : "+str);
out2.println(str);
System.out.println("Thread2 start2");
out2.flush();
}
}catch(Exception e){}
}
}
};
public static void connect(){
try{
serverSocket = new ServerSocket(9001);
int num=0;
while(num !=2){
System.out.println("소켓 생성중...");
socket = serverSocket.accept();
InetAddress clientHost = socket.getInetAddress();
int clientport = socket.getPort();
System.out.println("연결된 클라이언트 : \n ip : "+clientHost+", 포트 : "+clientport);
networkReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
networkWriter = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
reader = new BufferedReader(new InputStreamReader(System.in));
System.out.println("완료");
Object bj = socket;
System.out.println(bj);
if(num==0)
sendMessage.start();
else
checkMessage.start();
}
}catch(Exception e){}
}
public static void main(String[] args) {
Thread first = new Server();
first.start();
}
}
위와 같이 자바를 이용해 만든 소켓 서버에 두개의 단말기로 클라이언트 어플을 만들어 접속하는 것 까지는 됩니다.
근데 문제는 순차적으로 A와 B가 접속을 하면 B에서 A와 서버로는 전송이 되는데 A단말에서는 전송이 되지 않습니다.
A와 B가 서버를 거쳐 통신을 하려면 어디를 수정해야 할까요ㅜ
채팅서버를 응용하여 만든 것이지만 실제적으로는 어떤 명령어들을 서로 전송하려고 만든것입니다.ㅜ




서버소켓으로 들어온 요청을 소켓으로 넘겨서 사용하셨습니다.
여러개의 접속이 들어올때는 접속별로 다른 소켓을 관리해주어야합니다.
간단하게 arraylist 같은 자료형에 소켓을 추가하여 사용하시면 됩니다.
전화로 따지면 serversocket은 교환기로 요청이 일단 여기로 들어오고
실제로 연결되는 socket 부분에다가 해당 연결을 양도하게 되는 구조입니다.
이 소스의경우 socket을 하나만 사용하니
새로 들어온 요청이 이전요청이 연결되면 이전의 연결은 손실되게 되는것이죠