Network
사용자들이 옆에있는 장비로 데이터를 주고받는 작업을 네트워킹이라 한다.
자바에선 ip주소를 다루기 위한 클래스로 InetAddress를 제공
URL (uniform resource location)
인터넷에 존재하는 여러 서버들이 제공하는 자원에 접근할 수 있는 주소
http 통신과 Socket 통신
http - 단방향 통신 / Client의 Request가 있을 때 마다
Server가 Response하여 해당 정보를 전송하고 바로 연결을 종료
Socket - 양방향 통신 / Server와 Client가 특정 Port로 연결되어 실시간으로 양뱡향 통신이 가능
실시간 방송, 채팅, 게임과 같이 즉각적으로 정보를 주고받는 경우에 사용
Socket 통신의 규칙
1. 먼저 기다리는 측을 Server라고 하며, Server는 Port를 열고 Client의 접속을 기4다린다.
2. 접속하는 측을 Client라고 하며, Server의 IP와 Port에 접속하여 통신이 연결된다.
3. Server와 Client간의 통신은 Send, Receive의 형태로 주고받는다.
4. 통신이 끝나면 close()로 접속을 끊는다.
Socket 통신
Server
package ex2_socket;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
public class MyServer extends Thread {
ServerSocket ss;
public MyServer() {
try {
// 서버소켓 생성시 서비스 포트번호를 지정
// 클라이언트가 접속할 때 필요한 번호이다
// 서비스 포트번호의 범위는 3000번 이후의 번호를 사용하는것이 좋다
ss = new ServerSocket(3000);
System.out.println("서버 완료!");
} catch (Exception e) {
// TODO: handle exception
}
}
@Override
public void run() {
while (true) {
try {
Socket s = ss.accept();
String ip = s.getInetAddress().getHostAddress();
BufferedReader reader = new BufferedReader(new InputStreamReader(s.getInputStream()));
String msg = reader.readLine();
System.out.println(ip + " : " + msg);
} catch (Exception e) {
}
}
}
public static void main(String[] args) {
MyServer ms = new MyServer();
ms.start();
}
}
Client
package ex2_socket;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;
public class MyClient {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("입력 : ");
String msg = sc.nextLine();
if (msg != null && msg.trim().length() > 0) {
Socket s = null;
try {
s = new Socket("ip 주소 입력", 3000); // 서버 접속
// 문자열을 서버로 보내기 위해 스트림 준비
PrintWriter out = new PrintWriter(s.getOutputStream());
out.write(msg);
out.flush(); // 스트림에 담은 내용을 비워라
if (out != null)
out.close();
} catch (Exception e) {
// TODO: handle exception
} finally {
try {
if (s != null) {
s.close();
}
} catch (Exception e2) {
// TODO: handle exception
}
}
}
}
}
실행결과