1. 소켓통신 - 단방향 + while문 추가

서버 코드
package socket2;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
public class ServerFile {
// 클라이언트 연결을 받는 소켓
ServerSocket serverSocket;
// 실제 통신을 하는 소켓
Socket socket; // Ctrl + Space
BufferedReader br;
public ServerFile() {
System.out.println("1. 서버소켓 시작--------------------");
try {
serverSocket = new ServerSocket(10000);
System.out.println("2. 서버소켓 생성완료 : 클라이언트 접속 대기중 ------------------");
socket = serverSocket.accept(); // 클라이언트 접속 대기중 ....
System.out.println("3. 클라이언트 연결완료 - buffer 연결완료(read)");
br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
while (true) {
String msg = br.readLine();
System.out.println("4. 클라이언트로 부터 받은 메시지 : " + msg);
}
} catch (Exception e) {
System.out.println("서버소켓 에러 발생함" + e.getMessage());
}
}
public static void main(String[] args) {
new ServerFile();
}
}
클라이언트 코드
package socket2;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;
public class ClientFile {
Socket socket;
BufferedWriter bw;
BufferedReader br;
public ClientFile() {
try {
System.out.println("1. 클라이언트소켓 시작-------------------------");
socket = new Socket("localhost", 10000); //라인 실행시 -> 서버소켓의 accept() 메서드 호출
System.out.println("2. 버퍼(write) 연결완료 ------------------");
bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
// 키보드 연결
System.out.println("3. 키보드 스트림 + 버퍼(read) 연결완료 -----------------");
br = new BufferedReader(new InputStreamReader(System.in));
while (true) {
System.out.println("4. 키보드 메시지 입력 대기중 ----------------------");
String keyboardMsg = br.readLine();
// 메시지 끝을 알려줘야 한다. \n
bw.write(keyboardMsg+"\n");
bw.flush();
}
} catch (Exception e) {
System.out.println("클라이언트소켓 에러 발생함 : " + e.getMessage());
}
}
public static void main(String[] args) {
new ClientFile();
}
}
2. 소켓통신 - 스레드 (양방향)

서버 코드
package socket3;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class ServerFile {
// 클라이언트 연결을 받는 소켓
ServerSocket serverSocket;
// 실제 통신을 하는 소켓
Socket socket; // Ctrl + Space
BufferedReader br;
// 새로운 스레드가 필요하다.
BufferedWriter bw;
BufferedReader keyboard;
public ServerFile() {
System.out.println("1. 서버소켓 시작--------------------");
try {
serverSocket = new ServerSocket(10000);
System.out.println("2. 서버소켓 생성완료 : 클라이언트 접속 대기중 ------------------");
socket = serverSocket.accept(); // 클라이언트 접속 대기중 ....
System.out.println("3. 클라이언트 연결완료 - buffer 연결완료(read)");
br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
keyboard = new BufferedReader(new InputStreamReader(System.in));
bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
// write 스레드 실행 (글쓰기)
WriteThrerad wt = new WriteThrerad();
Thread t1 = new Thread(wt);
t1.start();
// main 스레드 역할 (글읽기)
while (true) {
String msg = br.readLine();
System.out.println("4. 클라이언트로 부터 받은 메시지 : " + msg);
}
} catch (Exception e) {
System.out.println("서버소켓 에러 발생함" + e.getMessage());
}
}
// 내부 클래스
class WriteThrerad implements Runnable {
@Override
public void run() {
while (true) {
try {
String keyboardMsg = keyboard.readLine();
bw.write(keyboardMsg+"\n");
bw.flush();
} catch (Exception e) {
System.out.println("서버소켓쪽에서 키보드 입력받는 중 오류가 발생했습니다 : " + e.getMessage());
}
}
}
}
public static void main(String[] args) {
new ServerFile();
}
}
클라이언트 코드
package socket3;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;
public class ClientFile {
Socket socket;
BufferedWriter bw;
BufferedReader keyboard;
BufferedReader br;
public ClientFile() {
try {
System.out.println("1. 클라이언트소켓 시작-------------------------");
socket = new Socket("localhost", 10000); //라인 실행시 -> 서버소켓의 accept() 메서드 호출
System.out.println("2. 버퍼(write) 연결완료 ------------------");
bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
// 키보드 연결
System.out.println("3. 키보드 스트림 + 버퍼(read) 연결완료 -----------------");
keyboard = new BufferedReader(new InputStreamReader(System.in));
br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
// 새로운 스레드 역할 (글 읽기)
ReadThrerad rt = new ReadThrerad();
Thread t1 = new Thread(rt);
t1.start();
// 메인 스레드의 역할 (글 쓰기)
while (true) {
System.out.println("4. 키보드 메시지 입력 대기중 ----------------------");
String keyboardMsg = keyboard.readLine();
// 메시지 끝을 알려줘야 한다. \n
bw.write(keyboardMsg+"\n");
bw.flush();
}
} catch (Exception e) {
System.out.println("클라이언트소켓 에러 발생함 : " + e.getMessage());
}
}
class ReadThrerad implements Runnable {
@Override
public void run() {
while (true) {
try {
String msg = br.readLine();
System.out.println("서버로부터받은 메시지:" + msg);
} catch (Exception e) {
System.out.println("클라이언트 소켓쪽에서 서버소켓 메시지를 입력받는 중 오류가 발생했습니다: " + e.getMessage());
}
}
}
}
public static void main(String[] args) {
new ClientFile();
}
}
3. 소켓 통신의 활용(Http)

Share article