자바 소켓 프로그래밍으로 채팅 프로그램을 만드는데 스레드로 문자열을 어떻게 전송하나요?
조회수 690회
import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.net.ServerSocket; import java.net.Socket; import java.util.Scanner;
public class Server { private ServerSocket serverSocket = null; private Socket socket = null; private BufferedReader in = null; private BufferedWriter out = null; private Scanner sc = new Scanner(System.in);
public Server() {
try {
System.out.println("연결 대기중");
serverSocket = new ServerSocket(9999);
socket = serverSocket.accept();
System.out.println("연결 완료");
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
out = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
// Server가 입력한 문자열
String serverMessage = null;
while (true) {
System.out.print("서버: ");
serverMessage = sc.nextLine();
out.write(serverMessage + "\n");
out.flush();
}
} catch (Exception e) {
e.printStackTrace();
}
GetMessage th = new GetMessage();
th.start();
}
// Client가 입력한 문자열
class GetMessage extends Thread {
@Override
public void run() {
String clientMessage = null;
while (true) {
try {
if (clientMessage == null) {
return;
}
clientMessage = in.readLine();
System.out.println("클라이언트: " + clientMessage);
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
public static void main(String[] args) {
new Server();
}
}
import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.net.Socket; import java.util.Scanner;
public class Client { private Socket socket = null; private BufferedReader in = null; private BufferedWriter out = null; private Scanner sc = new Scanner(System.in);
public Client() {
GetMessage th = new GetMessage();
th.start();
try {
socket = new Socket("localhost", 9999);
System.out.println("연결 완료");
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
out = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
// Client가 입력한 문자열
String clientMessage;
while (true) {
System.out.print("클라이언트: ");
clientMessage = sc.nextLine();
out.write(clientMessage + "\n");
out.flush();
}
} catch (Exception e) {
e.printStackTrace();
}
}
// Server가 입력한 문자열
class GetMessage extends Thread {
@Override
public void run() {
String serverMessage = null;
while (true) {
try {
if (serverMessage == null) {
return;
}
serverMessage = in.readLine();
System.out.println("서버: " + serverMessage);
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
public static void main(String[] args) {
new Client();
}
}
서버 측에서 문자를 전송하면 클라이언트 쪽에서 문자가 보이지 않습니다. 무엇이 문제인가요?
1 답변
-
public Server() { GetMessage th = new GetMessage(); th.start(); try { System.out.println("연결 대기중"); serverSocket = new ServerSocket(9999); socket = serverSocket.accept(); System.out.println("연결 완료"); in = new BufferedReader(new InputStreamReader(socket.getInputStream())); out = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); // Server가 입력한 문자열 String serverMessage = null; while (true) { System.out.print("서버: "); serverMessage = sc.nextLine(); out.write(serverMessage + "\n"); out.flush(); } } catch (Exception e) { e.printStackTrace(); } }
이렇게 아래 쓰레드 실행 부분을 try 보다 먼저 실행되게 한번 사부작 해보세요! while(true) 라서 아래 있으면 쓰레드가 실행되지 않을 것 같습니다.
GetMessage th = new GetMessage(); th.start();
댓글 입력