자바(Java) - 통신

Jan 10, 2024
자바(Java) - 통신

단방향(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

stwin755