logo

Java 소켓 프로그래밍

Java 소켓 프로그래밍은 다른 JRE에서 실행되는 응용 프로그램 간의 통신에 사용됩니다.

Java 소켓 프로그래밍은 연결 지향적이거나 비연결적일 수 있습니다.

Socket 및 ServerSocket 클래스는 연결 지향 소켓 프로그래밍에 사용되고 DatagramSocket 및 DatagramPacket 클래스는 연결 없는 소켓 프로그래밍에 사용됩니다.

소켓 프로그래밍의 클라이언트는 두 가지 정보를 알아야 합니다.

  1. 서버의 IP 주소 및
  2. 포트 번호.

여기서는 단방향 클라이언트와 서버 통신을 만들어 보겠습니다. 이 애플리케이션에서 클라이언트는 서버에 메시지를 보내고, 서버는 메시지를 읽고 인쇄합니다. 여기서는 Socket과 ServerSocket이라는 두 가지 클래스가 사용됩니다. Socket 클래스는 클라이언트와 서버를 통신하는 데 사용됩니다. 이 수업을 통해 우리는 메시지를 읽고 쓸 수 있습니다. ServerSocket 클래스는 서버 측에서 사용됩니다. ServerSocket 클래스의 accept() 메서드는 클라이언트가 연결될 때까지 콘솔을 차단합니다. 클라이언트 연결이 성공하면 서버 측에서 소켓 인스턴스를 반환합니다.

Java의 소켓 프로그래밍

소켓 클래스

소켓은 단순히 컴퓨터 간의 통신을 위한 끝점입니다. Socket 클래스를 사용하여 소켓을 만들 수 있습니다.

중요한 방법

방법설명
1) 공개 입력스트림 getInputStream()이 소켓에 연결된 InputStream을 반환합니다.
2) 공개 OutputStream getOutputStream()이 소켓에 연결된 OutputStream을 반환합니다.
3) 공개 동기화 무효 닫기()이 소켓을 닫습니다

ServerSocket 클래스

ServerSocket 클래스를 사용하여 서버 소켓을 만들 수 있습니다. 이 개체는 클라이언트와의 통신을 설정하는 데 사용됩니다.

중요한 방법

방법설명
1) 공개 소켓 수락()소켓을 반환하고 서버와 클라이언트 간의 연결을 설정합니다.
2) 공개 동기화 무효 닫기()서버 소켓을 닫습니다.

Java 소켓 프로그래밍의 예

서버 생성:

서버 애플리케이션을 생성하려면 ServerSocket 클래스의 인스턴스를 생성해야 합니다. 여기서는 클라이언트와 서버 간의 통신에 6666 포트 번호를 사용하고 있습니다. 다른 포트 번호를 선택할 수도 있습니다. accept() 메소드는 클라이언트를 기다립니다. 클라이언트가 지정된 포트 번호로 연결하면 소켓 인스턴스가 반환됩니다.

 ServerSocket ss=new ServerSocket(6666); Socket s=ss.accept();//establishes connection and waits for the client 

클라이언트 생성:

클라이언트 애플리케이션을 생성하려면 Socket 클래스의 인스턴스를 생성해야 합니다. 여기서는 서버의 IP 주소 또는 호스트 이름과 포트 번호를 전달해야 합니다. 여기서는 서버가 동일한 시스템에서 실행되고 있으므로 'localhost'를 사용합니다.

 Socket s=new Socket('localhost',6666); 

클라이언트가 텍스트를 보내고 서버가 이를 받아 인쇄하는 간단한 Java 소켓 프로그래밍을 살펴보겠습니다.

파일: MyServer.java

 import java.io.*; import java.net.*; public class MyServer { public static void main(String[] args){ try{ ServerSocket ss=new ServerSocket(6666); Socket s=ss.accept();//establishes connection DataInputStream dis=new DataInputStream(s.getInputStream()); String str=(String)dis.readUTF(); System.out.println('message= '+str); ss.close(); }catch(Exception e){System.out.println(e);} } } 

파일: MyClient.java

 import java.io.*; import java.net.*; public class MyClient { public static void main(String[] args) { try{ Socket s=new Socket('localhost',6666); DataOutputStream dout=new DataOutputStream(s.getOutputStream()); dout.writeUTF('Hello Server'); dout.flush(); dout.close(); s.close(); }catch(Exception e){System.out.println(e);} } } 
이 예제를 다운로드하세요

이 프로그램을 실행하려면 두 개의 명령 프롬프트를 열고 아래 그림과 같이 각 명령 프롬프트에서 각 프로그램을 실행하십시오.

클라이언트 애플리케이션을 실행하면 서버 콘솔에 메시지가 표시됩니다.

자바 네트워킹 프로그래밍

Java 소켓 프로그래밍의 예(읽기-쓰기 양면)

이 예에서 클라이언트는 먼저 서버에 쓴 다음 서버가 텍스트를 받아 인쇄합니다. 그런 다음 서버는 클라이언트에 쓰고 클라이언트는 텍스트를 받아 인쇄합니다. 단계는 계속됩니다.

파일: MyServer.java

 import java.net.*; import java.io.*; class MyServer{ public static void main(String args[])throws Exception{ ServerSocket ss=new ServerSocket(3333); Socket s=ss.accept(); DataInputStream din=new DataInputStream(s.getInputStream()); DataOutputStream dout=new DataOutputStream(s.getOutputStream()); BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); String str='',str2=''; while(!str.equals('stop')){ str=din.readUTF(); System.out.println('client says: '+str); str2=br.readLine(); dout.writeUTF(str2); dout.flush(); } din.close(); s.close(); ss.close(); }} 

파일: MyClient.java

 import java.net.*; import java.io.*; class MyClient{ public static void main(String args[])throws Exception{ Socket s=new Socket('localhost',3333); DataInputStream din=new DataInputStream(s.getInputStream()); DataOutputStream dout=new DataOutputStream(s.getOutputStream()); BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); String str='',str2=''; while(!str.equals('stop')){ str=br.readLine(); dout.writeUTF(str); dout.flush(); str2=din.readUTF(); System.out.println('Server says: '+str2); } dout.close(); s.close(); }}