단방향(Simplex) 통신
클라이언트
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
public class Client {
public static void main(String[] args) {
// localhost = 127.0.0.1 (루프백)
try {
Socket socket = new Socket("127.0.0.1", 10000);
BufferedWriter bw = new BufferedWriter(
new OutputStreamWriter(socket.getOutputStream(), "UTF-8")
);
bw.write("msg1\n");
bw.write("msg2\n");
bw.flush();
} catch (IOException e) {
e.printStackTrace();
}
}
}
서버
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
public static void main(String[] args) {
try {
ServerSocket serverSocket = new ServerSocket(10000);
Socket socket = serverSocket.accept(); // 리스너
System.out.println("클라이언트 연결됨");
BufferedReader br = new BufferedReader(
new InputStreamReader(socket.getInputStream(), "UTF-8"));
while (true) {
String msg = br.readLine();
if (msg == null) {
break;
}
System.out.println(msg);
}
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
반이중(Half-Duplex) 통신
클라이언트
import java.io.*;
import java.net.*;
public class Client {
public static void main(String[] args) {
try {
// 서버에 연결
Socket socket = new Socket("192.168.0.103", 10000);
// 소켓의 입력 스트림과 출력 스트림 생성
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream(), "UTF-8"));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(), "UTF-8"));
// 서버로 메시지 전송
bw.write("Hello, Server!\n");
bw.flush();
// 서버로부터 응답 받기
String response = br.readLine();
System.out.println("서버로부터 받은 응답: " + response + "\n");
// 연결 종료
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
서버
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
public class Server1 {
public static void main(String[] args) {
try {
ServerSocket serverSocket = new ServerSocket(20000);
Socket socket = serverSocket.accept();
// 소켓 연결 완료됨
// 버퍼 만들기 (recieved)
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String requestMsg = br.readLine();
System.out.println("클라이언트로부터 받은 메시지 : " + requestMsg);
// 버퍼 만들기 (send)
//BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
PrintWriter pw = new PrintWriter(socket.getOutputStream(), true);
if (requestMsg.equals("1")) {
pw.println("영화");
} else if (requestMsg.equals("2")) {
pw.println("드라마");
} else {
pw.println("프로토콜을 확인하세요 : 1은 영화, 2는 드라마");
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
전이중(Full-Duplex) 통신
클라이언트
import java.io.*;
import java.net.Socket;
public class Client {
public static void main(String[] args) {
try {
Socket socket = new Socket("localhost", 10000);
class ReadThread implements Runnable {
public void run() {
try {
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream(), "UTF-8"));
while (true) {
String msg = br.readLine();
System.out.println(msg);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
class WriteThread implements Runnable {
public void run() {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
try {
while (true) {
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(), "UTF-8"));
String s = br.readLine();
bw.write(s + "\n");
bw.flush();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
Thread read = new Thread(new ReadThread());
Thread write = new Thread(new WriteThread());
read.start();
write.start();
} catch (IOException e) {
e.printStackTrace();
}
}
}
서버
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
public static void main(String[] args) {
try {
ServerSocket serverSocket = new ServerSocket(10000);
Socket socket = serverSocket.accept();
class ReadThread implements Runnable {
public void run() {
try {
while (true) {
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream(), "UTF-8"));
String msg = br.readLine();
System.out.println(msg);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
class WriteThread implements Runnable {
public void run() {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
try {
while (true) {
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(), "UTF-8"));
String s = br.readLine();
bw.write(s + "\n");
bw.flush();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
Thread read = new Thread(new ReadThread());
Thread write = new Thread(new WriteThread());
read.start();
write.start();
} catch (IOException e) {
e.printStackTrace();
}
}
}
Share article