import java.net.ServerSocket; import java.net.Socket; public class TcpServer { public static void main(String[] args) { ServerSocket serverSocket = null; Socket socket = null; try { serverSocket = new ServerSocket(7777); // port 번호 socket = serverSocket.accept(); // 클라이언트가 요청할 때까지 기다리는 코드 Sender sender = new Sender(socket); Receiver receiver = new Receiver(socket); sender.start(); receiver.start(); } catch (Exception e) { } } }
import java.net.Socket; public class TcpClient { public static void main(String[] args) { String serverIp = "127.0.0.1"; //일대일 채팅을 실행하고 싶을 때 상대방의 IP로 수정하여 활용 try { Socket socket = new Socket(serverIp, 7777); System.out.println("서버에 연결되었습니다."); Sender sender = new Sender(socket); Receiver receiver = new Receiver(socket); sender.start(); receiver.start(); } catch (Exception e) { e.printStackTrace(); } } }
import java.io.DataOutputStream; import java.net.Socket; import java.util.Scanner; public class Sender extends Thread { Socket socket; DataOutputStream out; String name; public Sender(Socket socket) { this.socket = socket; try { out = new DataOutputStream(socket.getOutputStream()); name = "[" + socket.getInetAddress() + ":" + socket.getPort() + "]"; } catch (Exception e) { e.printStackTrace(); } } @Override public void run() { Scanner scanner = new Scanner(System.in); while (out != null) { try { out.writeUTF(name + scanner.nextLine()); } catch (Exception e) { } } } }
import java.io.DataInputStream; import java.io.DataOutputStream; import java.net.Socket; import java.util.Scanner; public class Receiver extends Thread { Socket socket; DataInputStream in; public Receiver(Socket socket) { this.socket = socket; try { in = new DataInputStream(socket.getInputStream()); } catch (Exception e) { e.printStackTrace(); } } @Override public void run() { while (in != null) { try { System.out.println(in.readUTF()); } catch (Exception e) { } } } }
📌서버 소켓: 클라이언트 소켓의 연결 요청을 대기하고, 연결 요청이 오면 클라이언트 소켓을 생성하여 통신을 가능하게 함 (요청대기 소켓)
📌클라이언트 소켓: 대기하는 것 없이 바로 사용 가능하며 실제로 데이터 송수신이 일어나는 것 (데이터 송수신 소켓)