์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- java
- ๋ฌ์คํธ
- C
- Python challenge
- ์ฐ๋ถํฌ
- ์ค๋ผํด
- ๋ฐฑ์ค ๋ฌ์คํธ
- OS
- Operating System
- Rust
- Python
- ์๋ฐ ๊ฐ๋
- ํ์ด์ฌ ์ฑ๋ฆฐ์ง
- Reversing
- ๋ฌ์คํธ ์์
- data communication
- ์๋ฐ
- ํ์ด์ฌ
- ์ด์์ฒด์
- ์๊ณ ๋ฆฌ์ฆ
- ํ์ด์ฌ ์ฒผ๋ฆฐ์ง
- ํ์ด์ฌ ์๊ณ ๋ฆฌ์ฆ
- Database
- ๋ฐฑ์ค
- ๋ฌ์คํธ ํ๋ก๊ทธ๋๋ฐ ๊ณต์ ๊ฐ์ด๋
- ๋ฐ์ดํฐ๋ฒ ์ด์ค
- ์ค๋ผํดDB
- ์๋ฐ ๊ธฐ์ด
- ubuntu
- ๋ฐ์ดํฐ ํต์
Archives
- Today
- Total
IT’s Portfolio
[Java] Lecture - Day 19 ๋ณธ๋ฌธ
728x90
๋ฐ์ํ
๐ฅ Basic Java - Day 19
๐๐ป [Chapter 14] ์๋ฐ ์์ผ ํ๋ก๊ทธ๋๋ฐ
TCP/IP
- TCP(Transmission Control Protocol)
- ๋ ์์คํ ๊ฐ์ ์ ๋ขฐ์ฑ์๋ ๋ฐ์ดํฐ์ ์ ์ก์ ๊ด์ฅํ๋ ํ๋กํ ์ฝ
- ์ฌ์ ์ก์ ์ํ ์ค๋ฅ์ ์ด, ์ค๋๋ง, ํ๋ฆ์ ์ด, ์ฐ๊ฒฐํ ํต์
- ์์ฉ ํ๋ก๊ทธ๋จ
- ์ด๋ฉ์ผ, FTP, HTTP
- UDP(User Datagram Protocol)
- ์ฌ์ ์ก, ํ๋ฆ์ ์ด๊ฐ ์๋ ๋น์ฐ๊ฒฐํ ํต์
- IP(Internet Protocol)
- ํจํท ๊ตํ ๋คํธ์ํฌ์์ ์ก์ ํธ์คํธ์ ์์ ํธ์คํธ๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ๊ฒ์ ๊ด์ฅํ๋ ํ๋กํ ์ฝ
IP ์ฃผ์
- ๋คํธ์ํฌ ์์์ ์ ์ผํ๊ฒ ์๋ณ๋ ์ ์๋ ์ปดํจํฐ ์ฃผ์
- ์ซ์๋ก ๊ตฌ์ฑ๋ ์ฃผ์
- ์ซ์๋ก ๋ ์ฃผ์๋ ๊ธฐ์ตํ๊ธฐ ์ด๋ ค์ฐ๋ฏ๋ก www.naver.com๊ณผ ๊ฐ์ ๋ฌธ์์ด๋ก ๊ตฌ์ฑ๋ ๋๋ฉ์ธ ์ด๋ฆ์ผ๋ก ๋ฐ๊ฟ ์ฌ์ฉ
- DNS(Domain Name System)
- ๋ฌธ์์ด๋ก ๊ตฌ์ฑ๋ ๋๋ฉ์ธ ์ด๋ฆ์ ์ซ์๋ก ๊ตฌ์ฑ๋ IP ์ฃผ์๋ก ์๋ ๋ณํ
- DNS(Domain Name System)
- ํ์ฌ 32๋นํธ์ IPv4๊ฐ ์ฌ์ฉ๋๊ณ ์์
- IP ์ฃผ์ ๊ณ ๊ฐ๋ก ์ธํด 128๋นํธ์ IPv6๋ฅผ ์ ์ ์ฌ์ฉํ๊ณ ์์
InetAddress ํด๋์ค
- ์ธํฐ๋ท ์ฃผ์์ ๊ดํ ์ ๋ณด๋ฅผ ๊ฐ์ง
- java.net.InetAddress
boolean equals(InetAddress other) // ํ ๊ฐ์ฒด๊ฐ other ๊ฐ์ฒด์ ๊ฐ์ ์ฃผ์๋ฅผ ๊ฐ์ง๋ฉด true, ์๋๋ฉด false ๋ฐํ
byte[] getAddress() // ์ฃผ์๋ฅผ ๋ํ๋ด๋ 4๊ฐ์ ์์๋ฅผ ๊ฐ์ง ๋ฐ์ดํธ ๋ฐฐ์ด ๋ฐํ
String getHostAddress() // ์ฃผ์ ์ ๋ณด๋ฅผ ๋ํ๋ด๋ ๋ฌธ์์ด ๋ฐํ
String getHostName() // ์ปดํจํฐ ์ด๋ฆ์ ๋ํ๋ด๋ ๋ฌธ์์ด ๋ฐํ
static InetAddress getLocalHost() throws UnknownHostException // ํ์ฌ ์ปดํจํฐ๋ฅผ ๋ํ๋ด๋ InetAddress ๊ฐ์ฒด ๋ฐํ
static InetAddress GetByName(String hostName) throws UnknownHostException // hostName์ผ๋ก ์ง์ ๋ ์ปดํจํฐ๋ฅผ ๋ํ๋ด๋ InetAddress ๊ฐ์ฒด ๋ฐํ
static InetAddress[] getAllByName(String hostName) throws UnknownHostException // hostName์ผ๋ก ์ง์ ๋ ๋ชจ๋ ์ปดํจํฐ(ํ๋์ ๋๋ฉ์ธ ์ด๋ฆ์ผ๋ก ์ฌ๋ฌ ๋์ ์ปดํจํฐ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ)๋ฅผ ๋ํ๋ด๋ InetAddress ๊ฐ์ฒด๋ค์ ๋ฐฐ์ด ๋ฐํ
- ์ฃผ์ ๋ฉ์๋
import java.net.*;
public class SocketExam01 {
public static void main(String[] args) throws UnknownHostException {
InetAddress address1 = InetAddress.getLocalHost();
System.out.println("Local Name: " + address1.getHostName());
System.out.println("Local IP: " + address1.getHostAddress());
InetAddress address2 = InetAddress.getByName("www.naver.com");
System.out.println("www.naver.com Name&IP: " + address2);
InetAddress[] all = InetAddress.getAllByName("google.com");
for(InetAddress t:all) System.out.println(t);
}
}
- ๋ฉ์๋ ์ฌ์ฉ ์์
ํฌํธ
- ํต์ ์ ์ ํตํด ์์ ๋๋ ๋ฐ์ดํฐ๊ฐ ์ปดํจํฐ ๋ด์ ์ฌ๋ฌ ํต์ ํ๋ก๊ทธ๋จ ์ค์์ ํ๋์ ํ๋ก๊ทธ๋จ์ ์ ๋ฌ๋๋๋ก ํ๊ธฐ ์ํ ๋ฒํธ
- IP ์ฃผ์๋ ๋คํธ์ํฌ ์์ ์ปดํจํฐ ๋๋ ์์คํ ์ ์๋ณํ๋ ์ฃผ์
- ํฌํธ ๋ฒํธ๋ฅผ ์ด์ฉํ์ฌ ํต์ ํ ์์ฉ ํ๋ก๊ทธ๋จ ์๋ณ
- ๋ชจ๋ ์์ฉ ํ๋ก๊ทธ๋จ์ ํ๋ ์ด์์ ํฌํธ ์์ฑ ๊ฐ๋ฅ
- ์ ์๋ ค์ง ํฌํธ(well-known ports)
- ์์คํ ์ด ์ฌ์ฉํ๋ ํฌํธ ๋ฒํธ
- ์ ์๋ ค์ง ์์ฉ ํ๋ก๊ทธ๋จ์์ ์ฌ์ฉํ๋ ํฌํธ ๋ฒํธ
- 0๋ถํฐ 1023 ์ฌ์ด์ ํฌํธ ๋ฒํธ
- SSH 22, HTTP 80, FTP 21
- 0๋ถํฐ 1023 ์ฌ์ด์ ํฌํธ ๋ฒํธ
- ๊ฐ๋ฐ์๊ฐ ์ฌ์ฉํ์ง ์๋ ๊ฒ์ด ์ข์
- ์ถฉ๋ ๊ฐ๋ฅ์ฑ ๋ดํฌ
์์ผ ํ๋ก๊ทธ๋๋ฐ
- ์์ผ(socket)
- TCP/IP ๋คํธ์ํฌ๋ฅผ ์ด์ฉํ์ฌ ์ฝ๊ฒ ํต์ ํ๋ก๊ทธ๋จ์ ์์ฑํ๋๋ก ์ง์ํ๋ ๊ธฐ๋ฐ ๊ธฐ์
- ๋ ์์ฉ ํ๋ก๊ทธ๋จ ๊ฐ์ ํต์ ์ฐ๊ฒฐ์ ๋๋จ(endpoint)
- ์์ผ๋ผ๋ฆฌ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์
- ์์ผ์ ํน์ IP, ํฌํธ ๋ฒํธ์ ๊ฒฐํฉ
- TCP/IP ๋คํธ์ํฌ๋ฅผ ์ด์ฉํ์ฌ ์ฝ๊ฒ ํต์ ํ๋ก๊ทธ๋จ์ ์์ฑํ๋๋ก ์ง์ํ๋ ๊ธฐ๋ฐ ๊ธฐ์
- ์๋ฐ๋ ์์ผ ํต์ ํ ์ ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ง์
- ์์ผ ์ข ๋ฅ: ์๋ฒ ์์ผ ๊ณผ ํด๋ผ์ด์ธํธ ์์ผ
Socket ํด๋์ค, ํด๋ผ์ด์ธํธ ์์ผ
- ํด๋ผ์ด์ธํธ ์์ผ์ ์ฌ์ฉ๋๋ ํด๋์ค
- java.net ํจํค์ง์ ํฌํจ
Socket() // ์ฐ๊ฒฐ๋์ง ์์ ์ํ์ ์์ผ์ ์์ฑ
Socket(InetAddress address, int port) // ์์ผ์ ์์ฑํ๊ณ , ์ง์ ๋ IP ์ฃผ์์ ํฌํธ ๋ฒํธ์์ ๋๊ธฐํ๋ ์๊ฒฉ ์์ฉ ํ๋ก๊ทธ๋จ์ ์์ผ์ ์ฐ๊ฒฐ
Socket(String host, int port) // ์์ผ์ ์์ฑํ์ฌ ์ง์ ๋ ํธ์คํธ์ ํฌํธ ๋ฒํธ์ ์ฐ๊ฒฐํจ. ํธ์คํธ ์ด๋ฆ์ด null์ธ ๊ฒฝ์ฐ๋ ๋ฃจํ๋ฐฑ(loopback) ์ฃผ์๋ก ๊ฐ์
- ์์ฑ์
void bind(SocketAddress bindpoint) // ์์ผ์ ๋ก์ปฌ IP ์ฃผ์์ ๋ก์ปฌ ํฌํธ ์ง์
void close() // ์์ผ์ ๋ซ์
void connect(SocketAddress endpoint) // ์์ผ์ ์๋ฒ์ ์ฐ๊ฒฐ
InetAddress getInetAddress() // ์์ผ์ ์ฐ๊ฒฐ๋ ์๋ฒ IP ์ฃผ์ ๋ฐํ
InputStream getInputStream() // ์์ผ์ ์ฐ๊ฒฐ๋ ์
๋ ฅ ์คํธ๋ฆผ ๋ฐํ. ์ด ์คํธ๋ฆผ์ ์ด์ฉํ์ฌ ์์ผ์ด ์๋ํธ์ผ๋ก๋ถํฐ ๋ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ์ ์์
InetAddress getLocalAddress() // ์์ผ์ด ์ฐ๊ฒฐ๋ ๋ก์ปฌ ์ฃผ์ ๋ฐํ
int getLocalPort() // ์์ผ์ ๋ก์ปฌ ํฌํธ ๋ฒํธ ๋ฐํ
int getPort() // ์์ผ์ ์ฐ๊ฒฐ๋ ์๋ฒ์ ํฌํธ ๋ฒํธ ๋ฐํ
OutputStream getOutputStream() // ์์ผ์ ์ฐ๊ฒฐ๋ ์ถ๋ ฅ ์คํธ๋ฆผ ๋ฐํ. ์ด ์คํธ๋ฆผ์ ์ถ๋ ฅํ๋ฉด ์์ผ์ด ์๋ฒ๋ก ๋ฐ์ดํฐ ์ ์ก
boolean isBound() // ์์ผ์ด ๋ก์ปฌ ์ฃผ์์ ์ฐ๊ฒฐ๋์ด ์์ผ๋ฉด true ๋ฐํ
boolean isConnected() // ์์ผ์ด ์๋ฒ์ ์ฐ๊ฒฐ๋์ด ์์ผ๋ฉด true ๋ฐํ
boolean isClosed() // ์์ผ์ด ๋ซํ์์ผ๋ฉด true ๋ฐํ
void setSoTimeout(int timeout) // ๋ฐ์ดํฐ ์ฝ๊ธฐ ํ์์์ ์๊ฐ ์ง์ . 0์ด๋ฉด ํ์์์ ํด์
- ์ฃผ์ ๋ฉ์๋
ํด๋ผ์ด์ธํธ์์ ์์ผ์ผ๋ก ์๋ฒ์ ์ ์ํ๋ ์ฝ๋
Socket clientSocket = new Socket("128.12.1.1", 5550);
- ํด๋ผ์ด์ธํธ ์์ผ ์์ฑ ๋ฐ ์๋ฒ์ ์ ์
- Socket ๊ฐ์ฒด๊ฐ ์์ฑ๋๋ฉด 128.12.1.1 ์ฃผ์์ 5550 ํฌํธ์ ์๋ ์ ์
BufferedReader in = new BufferedReader(
new InputStreamReader(clientSocket.getInputStream())
);
BufferedWriter out = new BufferedWriter(
new OutputStreamWriter(clientSocket.getOutputStream())
);
- ์์ผ์ผ๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ ์ ์ถ๋ ฅ ์คํธ๋ฆผ ์์ฑ
out.write("hello\n");
out.flush();
- ์๋ฒ๋ก ๋ฐ์ดํฐ ์ ์ก
- flush() ํธ์ถ ์ ์คํธ๋ฆผ ์์ ๋ฐ์ดํฐ๋ฅผ ๋จ๊ธฐ์ง ์๊ณ ๋ชจ๋ ์ ์ก
String line = in.readline(); // ํ ํ์ ๋ฌธ์์ด ์์
- ์๋ฒ๋ก๋ถํฐ ๋ฐ์ดํฐ ์์
clientSocket.close();
- ๋คํธ์ํฌ ์ ์ ์ข ๋ฃ
ServerSocket ํด๋์ค, ์๋ฒ ์์ผ
- ์๋ฒ ์์ผ์ ์ฌ์ฉ๋๋ ํด๋์ค
- java.net ํจํค์ง์ ํฌํจ
- ServerSocket์ ๋ฐ์ดํฐ ์ก์์ ์ ์ฌ์ฉํ์ง ์์
- ์๋ฒ๊ฐ ํด๋ผ์ด์ธํธ์ ์ฐ๊ฒฐ ์์ฒญ์ ์๋ฝํ๋ฉด, ํด๋ผ์ด์ธํธ๋ก ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋ Socket ๊ฐ์ฒด๋ฅผ ๋ณ๋๋ก ์์ฑ
ServerSocket(int port) // ์ง์ ๋ ํฌํธ ๋ฒํธ์ ๊ฒฐํฉ๋ ์์ผ ์์ฑ
- ์์ฑ์
Socket accept() // ํด๋ผ์ด์ธํธ๋ก๋ถํฐ ์ฐ๊ฒฐ ์์ฒญ์ ๊ธฐ๋ค๋ฆฌ๋ค ์์ฒญ์ด ๋ค์ด์ค๋ฉด ์๋ฝํ๊ณ ํด๋ผ์ด์ธํธ์ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ ์ Socket ๊ฐ์ฒด ๋ฐํ
void close() // ์๋ฒ ์์ผ ๋ซ์
InetAddress getInetAddress() // ์๋ฒ ์์ผ์ ๋ก์ปฌ IP ์ฃผ์ ๋ฐํ
int getLocalPort() // ์๋ฒ ์์ผ์ ๋ก์ปฌ ํฌํธ ๋ฒํธ ๋ฐํ
boolean isBound() // ์๋ฒ ์์ผ์ด ๋ก์ปฌ ์ฃผ์์ ์ฐ๊ฒฐ๋์ด ์์ผ๋ฉด true ๋ฐํ
boolean isClosed() // ์๋ฒ ์์ผ์ด ๋ซํ์์ผ๋ฉด true ๋ฐํ
void setSoTimeout(int timeout) // accept()๊ฐ ๋๊ธฐํ๋ ํ์์์ ์๊ฐ ์ง์ . 0์ด๋ฉด ๋ฌดํ์ ๋๊ธฐ
- ์ฃผ์ ๋ฉ์๋
์๋ฒ๊ฐ ํด๋ผ์ด์ธํธ์ ํต์ ํ๋ ๊ณผ์
ServerSocket serverSocket = new ServerSocket(5550);
- ์๋ฒ ์์ผ ์์ฑ
- ์๋ฒ๋ ์ ์์ ๊ธฐ๋ค๋ฆฌ๋ ํฌํธ๋ก 5550 ์ ํ
Socket socket = serverSocket.accept();
- ํด๋ผ์ด์ธํธ๋ก๋ถํฐ ์ ์์ ๊ธฐ๋ค๋ฆผ
- accept() ๋ฉ์๋๋ ์ฐ๊ฒฐ ์์ฒญ์ด ์ค๋ฉด ์๋ก์ด Socket ๊ฐ์ฒด ๋ฐํ
- ์ ์ ํ ์๋ก ๋ง๋ค์ด์ง Socket ๊ฐ์ฒด๋ฅผ ํตํด ํด๋ผ์ด์ธํธ์ ํต์
BufferedReader in = new BufferedReader(
new InputStreamReader(socket.getInputStream())
);
BufferedWriter out = new BufferedWriter(
new OutputStreamWriter(socket.getOutputStream())
);
- ๋คํธ์ํฌ ์ ์ถ๋ ฅ ์คํธ๋ฆผ ์์ฑ
์๋ฒ์ ํด๋ผ์ด์ธํธ ๊ฐ์ ์ฑํ
- ๊ฐ๋จํ ์ฑํ
ํ๋ก๊ทธ๋จ
- ์๋ฒ์ ํด๋ผ์ด์ธํธ๊ฐ 1:1๋ก ์ฑํ
- ํด๋ผ์ด์ธํธ์ ์๋ฒ๊ฐ ์๋ก ํ๋ฒ์ฉ ๋ฒ๊ฐ์๊ฐ๋ฉด์ ๋ฌธ์์ด ์ ์ก
- ๋ฌธ์์ด ๋์ "\n"์ ๋ง๋ถ์ฌ ๋ณด๋ด๊ณ ๋ผ์ธ ๋จ์๋ก ์์
- ํด๋ผ์ด์ธํธ๊ฐ bye๋ฅผ ๋ณด๋ด๋ฉด ํ๋ก๊ทธ๋จ ์ข ๋ฃ
import java.io.*;
import java.net.*;
import java.util.*;
public class ServerExam01 {
public static void main(String[] args) {
BufferedReader in = null;
BufferedWriter out = null;
ServerSocket listener = null;
Socket s = null;
Scanner sc = new Scanner(System.in);
try {
listener = new ServerSocket(9999); // ์๋ฒ ์์ผ ์์ฑ
System.out.println("Waiting for connection...");
s = listener.accept(); // ํด๋ผ์ด์ธํธ๋ก๋ถํฐ ์ฐ๊ฒฐ ์์ฒญ ๋๊ธฐ
System.out.println("Connected...");
in = new BufferedReader(
new InputStreamReader(s.getInputStream())
);
out = new BufferedWriter(
new OutputStreamWriter(s.getOutputStream())
);
while(true) {
String inMsg = in.readLine();
if(inMsg.equalsIgnoreCase("bye")) {
System.out.println("Disconnecting...");
break;
}
System.out.println("Client: "+inMsg);
System.out.print("Send>>");
String outMsg = sc.nextLine();
out.write(outMsg+"\n");
out.flush();
}
} catch(IOException e) {
System.out.println(e.getMessage());
e.printStackTrace();
} finally {
try {
sc.close();
if(s!=null) s.close();
if(listener!=null) listener.close();
} catch(IOException e2) {
System.out.println(e2.getMessage());
e2.printStackTrace();
}
}
}
}
- Server ์ฝ๋
import java.io.*;
import java.net.*;
import java.util.*;
public class ClientExam01 {
public static void main(String[] args) {
BufferedReader in = null;
BufferedWriter out = null;
Socket s = null;
Scanner sc = new Scanner(System.in);
try {
s = new Socket("localhost", 9999); // ํด๋ผ์ด์ธํธ ์์ผ ์์ฑ. ์๋ฒ์ ์ฐ๊ฒฐ
in = new BufferedReader(
new InputStreamReader(s.getInputStream())
);
out = new BufferedWriter(
new OutputStreamWriter(s.getOutputStream())
);
while(true) {
System.out.print("Send>>");
String outMsg = sc.nextLine(); // ํค๋ณด๋์์ ํ ํ ์ฝ๊ธฐ
out.write(outMsg+"\n"); // ํค๋ณด๋์์ ์ฝ์ ๋ฌธ์์ด ์ ์ก
out.flush(); // out์ ์คํธ๋ฆผ ๋ฒํผ์ ์๋ ๋ชจ๋ ๋ฌธ์์ด ์ ์ก
if(outMsg.equalsIgnoreCase("bye")) break;
String inMsg = in.readLine(); // ์๋ฒ๋ก๋ถํฐ ํ ํ ์์
System.out.println("Server: "+inMsg);
}
} catch(IOException e) {
System.out.println(e.getMessage());
e.printStackTrace();
} finally {
try {
sc.close();
if(s!=null) s.close();
} catch(IOException e2) {
System.out.println(e2.getMessage());
e2.printStackTrace();
}
}
}
}
- Client ์ฝ๋
์์ ๊ณ์ฐ ์๋ฒ
- ๋ฌธ์ ๊ฐ์
- ์๋ฒ์ ํด๋ผ์ด์ธํธ๋ 1:1 ํต์
- ์๋ฒ๋ฅผ ๋จผ์ ์คํ์ํค๊ณ ํด๋ผ์ด์ธํธ๋ฅผ ์คํ์์ผ ์๋ฒ์ ์ ์
- ํด๋ผ์ด์ธํธ๋ ์ฌ์ฉ์๋ก๋ถํฐ ์์์ ์ ๋ ฅ๋ฐ์ ์๋ฒ๋ก ์ ์ก
- ์ฐ์ฐ์๋ +, -, *์ 3๊ฐ์ง๋ง ํ์ฉํ๊ณ ์ ์ ์ฐ์ฐ๋ง ๊ฐ๋ฅ
- ์๋ฒ๊ฐ ์์ ๋ฐ์ผ๋ฉด ์์ ์๋ฒ์ ํ๋ฉด์ ์ถ๋ ฅํ๊ณ , ๊ณ์ฐํ์ฌ ๊ฒฐ๊ณผ๋ฅผ ํด๋ผ์ด์ธํธ๋ก ์ ์ก
- ํด๋ผ์ด์ธํธ๋ ์๋ฒ๋ก๋ถํฐ ๋ฐ์ ๋ต์ ํ๋ฉด์ ์ถ๋ ฅ
- ํด๋ผ์ด์ธํธ์ ์๋ฒ๋ ์ ์กํ ๋ฐ์ดํฐ๋ฅผ ๋ฌธ์์ด๋ก ๋ง๋ค๊ณ "\n"์ ๋ง๋ถ์ฌ ์ ์กํ๋ฉฐ, ๋ผ์ธ ๋จ์๋ก ์ก์์
- ํด๋ผ์ด์ธํธ๊ฐ "bye"๋ฅผ ๋ณด๋ด๋ฉด ์์ชฝ ๋ชจ๋ ์ข ๋ฃ
import java.io.*;
import java.util.*;
import java.net.*;
public class ServerExam02 {
public static void main(String[] args) {
BufferedReader in = null;
BufferedWriter out = null;
ServerSocket listener = null;
Socket s = null;
try {
listener = new ServerSocket(9999);
System.out.println("Waiting for connection...");
s = listener.accept();
System.out.println("Connected...");
in = new BufferedReader(
new InputStreamReader(s.getInputStream())
);
out = new BufferedWriter(
new OutputStreamWriter(s.getOutputStream())
);
while(true) {
String inMsg = in.readLine();
if (inMsg.equalsIgnoreCase("bye")) {
System.out.println("Disconnecting...");
break;
} else {
System.out.println(inMsg);
String re = calc(inMsg);
if (re.equalsIgnoreCase("Error")) {
out.write("Incorrect Calculation Expression...\n");
out.flush();
} else {
out.write(re + "\n");
out.flush();
}
}
}
} catch(IOException e) {
System.out.println(e.getMessage());
e.printStackTrace();
} finally {
try {
if(s!=null) s.close();
if(listener!=null) listener.close();
} catch(IOException e2) {
System.out.println(e2.getMessage());
e2.printStackTrace();
}
}
}
protected static String calc(String exp) {
StringTokenizer st = new StringTokenizer(exp, " ");
if(st.countTokens()!=3) return "Error";
int n1 = Integer.parseInt(st.nextToken());
String c = st.nextToken();
int n2 = Integer.parseInt(st.nextToken());
String re = switch(c) {
case "+" -> Integer.toString(n1+n2);
case "-" -> Integer.toString(n1-n2);
case "*" -> Integer.toString(n1*n2);
default -> "Error";
};
return re;
}
}
- Server ์ฝ๋
import java.util.*;
import java.net.*;
import java.io.*;
public class ClientExam02 {
public static void main(String[] args) {
BufferedReader in = null;
BufferedWriter out = null;
Socket s = null;
Scanner sc = new Scanner(System.in);
try {
s = new Socket("localhost", 9999);
in = new BufferedReader(
new InputStreamReader(s.getInputStream())
);
out = new BufferedWriter(
new OutputStreamWriter(s.getOutputStream())
);
while(true) {
System.out.print("Expression(๋น์นธ ํฌํจ ์
๋ ฅ, ex: 24 + 42)>>");
String exp = sc.nextLine();
out.write(exp+"\n");
out.flush();
if(exp.equalsIgnoreCase("bye")) break;
System.out.println("Result: "+in.readLine());
}
} catch(IOException e) {
System.out.println(e.getMessage());
e.printStackTrace();
} finally {
sc.close();
try {
if(s!=null) s.close();
} catch(IOException e2) {
System.out.println(e2.getMessage());
e2.printStackTrace();
}
}
}
}
- Client ์ฝ๋
๋ฉํฐ ์ค๋ ๋ ์์ ๊ณ์ฐ ์๋ฒ
package thread_calc;
import java.util.*;
import java.io.*;
import java.net.*;
public class ServerExam03 {
public static void main(String[] args) {
ServerSocket listener = null;
try {
listener = new ServerSocket(9999);
System.out.println("Waiting for connection...");
while(true) {
Socket s = listener.accept();
CalcThread calcThread = new CalcThread(s);
calcThread.start();
}
} catch(IOException e) {
System.out.println(e.getMessage());
e.printStackTrace();
} finally {
try {
if(listener!=null) listener.close();
} catch(IOException e2) {
System.out.println(e2.getMessage());
e2.printStackTrace();
}
}
}
}
class CalcThread extends Thread {
private Socket s;
CalcThread(Socket s) { this.s = s; }
protected static String calc(String exp) {
StringTokenizer st = new StringTokenizer(exp, " ");
if(st.countTokens()!=3) return "Error";
int n1 = Integer.parseInt(st.nextToken());
String c = st.nextToken();
int n2 = Integer.parseInt(st.nextToken());
String re = switch(c) {
case "+" -> Integer.toString(n1+n2);
case "-" -> Integer.toString(n1-n2);
case "*" -> Integer.toString(n1*n2);
default -> "Error";
};
return re;
}
@Override
public void run() {
try {
InetAddress addr = s.getInetAddress();
String cAddr = addr.getHostAddress();
System.out.println(cAddr + " is connected...");
BufferedReader in = new BufferedReader(
new InputStreamReader(s.getInputStream())
);
BufferedWriter out = new BufferedWriter(
new OutputStreamWriter(s.getOutputStream())
);
while(true) {
String inMsg = in.readLine();
if(inMsg.equalsIgnoreCase("bye")) {
System.out.println(cAddr + ": is disconnected...");
break;
}
System.out.println(cAddr+": " +inMsg);
String res = calc(inMsg);
out.write(res+"\n");
out.flush();
}
} catch(IOException e) {
System.out.println(e.getMessage());
e.printStackTrace();
} finally {
try {
if(s!=null) s.close();
} catch(IOException e2) {
System.out.println(e2.getMessage());
e2.printStackTrace();
}
}
}
}
- Server ์ฝ๋
728x90
๋ฐ์ํ
'Development Study > Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Java] Lecture - Day 18 (1) | 2024.06.06 |
---|---|
[Java] Lecture - Day 17 (1) | 2024.06.06 |
[Java] Lecture - Day 16 (1) | 2024.05.17 |
[Java] Lecture - Day 15 (0) | 2024.04.26 |
[Java] Lecture - Day 14 (0) | 2024.04.05 |
Comments