반응형
JAVA 네트워크 프로그래밍
네트워킹의 개념은 컴퓨터들을 서로 연결하여 데이터를 손쉽게 주고받거나 또는 자원을 함께 공유하고자 하는 노력에서 시작되었다.
자바에서 제공하는 java.net패키지를 사용하면 이러한 네트워크 어플리케이션의 데이터 통신 부분을 쉽게 작성할 수 있다.
InetAddress
- Ip주소를 다루기 위한 클래스
URL(Uniform Resource Location)
- URL은 인터넷에 존재하는 여러 서버들이 제공하는 자원에 접근할 수 있는 주소를 표현하기 위한 것
- ‘프로토콜://호스트명:포트번호/경로명/파일명?쿼리스트링'
URLConnection
- 어플리케이션과 URL간의 통신연결을 나타내는 클래스의 최상위 클래스로 추상클래스
- HttpUrlConnection과 JarURLConnection이 있으며 URL의 프로토콜이 http프로토콜이라면 openConnection()은 Http URLConnection을 반환한다. URLConnection을 사용해서 연결하고자하는 자원에 접근하고 읽고 쓰기를 할 수 있다.
- URLConnection conn = url.openConnection();
- InputStream in = conn.getInputStream();
소켓 프로그래밍
소켓을 이용한 통신 프로그래밍을 뜻함
소켓(socket)이란 프로세스간의 통신에 사용되는 양쪽 끝단(endpoint)을 의미함
TCP-Sockert,ServerSocket
UDP-DatagramSocket,DatagramPacket,MulticastSocket
TCP 소켓 프로그래밍
- 서버프로그램에서는 서버 소켓을 사용해서 서버 컴퓨터의 특정 포트에서 클라이언트의 연결요청을 처리할 준비를 한다.
- 클라이언트 프로그램은 접속할 서버의 IP 주소와 포트 정보를 가지고 소켓을 생성해서 서버에 연결을 요청한다.
- 서버소켓은 클라이언트의 연결요청을 받으면 서버에 새로운 소켓을 생성해서 클라이언트의 소켓과 연결되도록 한다.
- 이제 클라이언트의 소켓과 새로 생성된 서버의 소켓은 서버소켓과 관계없이 일대일 통신을 한다.
Socket - 프로세스간의 통신을 담당하며, InputStream과 OutputStream을 가지고 있다. 이 두 스트림을 통해 프로세스간의 통신(입출력)이 이루어진다.
ServerSocket - 포트와 연결(bind)되어 외부의 연결요청을 기다리다 연결요청이 들어오면, Socket을 생성해서 소켓과 소켓간의 통신이 이루어지도록 한다. 한 포트에 하나의 ServerSocket만 연결할 수 있다.
(프로토콜이 다르면 같은 포트를 공유할 수 있다.)
간단한 소켓프로그래밍
TCP Server
public class TcpIpServer {
private static final Logger LOG = LoggerFactory.getLogger(TcpIpServer.class);
public static void main(String[] args) {
try(ServerSocket serverSocket = new ServerSocket(8080)){
while(true) {
// 요청이 들어올때까지 대기, 클라이언트의 연결요청이 들어오면 클라이언트소켓과 통신할 소켓을 반환
Socket socket = serverSocket.accept();
LOG.info(socket.getInetAddress() +"로부터 연결요청이 들어왔습니다.");
// 출력스트림
OutputStream out = socket.getOutputStream();
DataOutputStream dos = new DataOutputStream(out);
dos.writeUTF("Message from server");
LOG.info("메시지 전송 완료");
dos.close();
}
}catch(IOException e) {
LOG.error(e.toString());
}
}
TCP Client
package networking.tcp;
import java.io.DataInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.Socket;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class TcpIpClient {
private static final Logger LOG = LoggerFactory.getLogger(TcpIpClient.class);
public static void main(String[] args) {
String serverIp = "127.0.0.1";
try(Socket socket = new Socket(serverIp, 8080)){
// 입력스트림
InputStream in = socket.getInputStream();
DataInputStream dis = new DataInputStream(in);
// 데이터 출력
LOG.info("message : " + dis.readUTF());
dis.close();
}catch(IOException e) {
LOG.error(e.toString());
}
}
}
결과
Server
Client
참고서적 : JAVA의 정석
반응형
'프로그래밍 노트 > JAVA' 카테고리의 다른 글
[JAVA] JCA(Java Cryptography Architecture) 자바 암호화와 보안 (0) | 2018.09.05 |
---|---|
[JAVA] 컬렉션프레임워크(CollectionFramework) 2 (0) | 2018.08.13 |
[JAVA] 자바7 try-with-resources문, multicatch 문 (1) | 2018.07.08 |
[JAVA] 컬렉션프레임워크(CollectionFramework) 1 (0) | 2018.07.02 |
[JAVA] JVM 메모리구조 (0) | 2018.06.29 |