Latest web development tutorials

자바 네트워크 프로그래밍

네트워크 프로그래밍 여러 장치 (컴퓨터) 프로그램의 실행을 작성하는 것을 의미한다, 이러한 장치는 네트워크를 통해 연결되어있다.

하는 J2SE API의 java.net 패키지는 낮은 수준의 통신 정보를 제공하는 클래스와 인터페이스가 포함되어 있습니다. 당신은 문제 해결에 초점을 맞출 것이 아니라 통신의 세부 사항에 초점이 클래스와 인터페이스를 사용할 수 있습니다.

java.net 패키지는 두 가지 일반적인 네트워크 프로토콜에 대한 지원을 제공합니다 :

  • TCP : TCP는 두 응용 프로그램 간의 신뢰성있는 통신을 보장 전송 제어 프로토콜의 약어입니다. 일반적으로 TCP / IP라는 인터넷 프로토콜 사용.
  • UDP는 : UDP는 사용자 데이터 그램 프로토콜, 연결 프로토콜의 약어입니다. 상기 데이터 패킷을 제공하는 애플리케이션 데이터 사이에 전송된다.

이 튜토리얼은 다음과 같은 두 가지 내용을 설명합니다.

  • 소켓 프로그래밍 : 이것은, 그것은에 매우 자세하게 설명되어 가장 널리 사용되는 네트워크 개념
  • URL 처리 : 다른 공간에서 이야기를이 장의에 대한 자세한 내용은 여기를 클릭하여 Java 언어를 처리하는 URL을 .

소켓 프로그래밍

소켓은 TCP는 두 시스템 사이의 통신 메커니즘을 제공 사용한다. 클라이언트 프로그램은 소켓을 만들고 서버 소켓에 연결하려고합니다.

연결이 설정되면, 서버는 소켓 객체를 생성합니다. 클라이언트 및 서버는 이제 쓸 수와 통신 할 수있는 Socket 객체를 읽을 수 있습니다.

java.net.Socket의 클래스는 소켓을 나타내고, 클라이언트 서버 프로그램을 수신하고, 그들과 함께 연결하는 메커니즘을 구축하는 java.net.ServerSocket의 클래스를 제공합니다.

다음 단계를 사용하여 TCP 연결이 두 컴퓨터 간의 소켓을 설정할 때 발생 :

  • ServerSocket의 서버는 서버의 통신 포트를 나타내는 객체를 인스턴스화.
  • ServerSocket의 클래스 서버 호출은 클라이언트가 특정 포트에서 서버에 연결될 때까지 기다립니다 () 메소드를 받아들입니다.
  • 서버가 소켓 개체를 인스턴스화 클라이언트 대기하는 경우에, 연결을 요청하는 서버 이름과 포트 번호를 지정합니다.
  • Socket 클래스의 생성자는 지정된 서버 및 포트 번호에 클라이언트를 연결을 시도합니다. 통신이 확립되면, 서버와 통신 할 수있는 소켓 객체 클라이언트를 생성한다.
  • 서버 측에서 동의 () 메소드는 클라이언트 소켓에 연결 소켓에 새 소켓 서버 참조를 반환합니다.

연결이 통신 중에 I / O 스트림을 이용하여 설정된 후에. 각 소켓은 입력 및 출력 스트림 스트림을 갖는다. 서버에 대한 클라이언트의 입력 스트림을 출력 스트림 서버 출력 스트림 클라이언트의 입력 스트림.

데이터는 동시에 두 개의 데이터 스트림을 통해 전송 될 수 있도록 TCP는 쌍방향 통신 프로토콜이다. 다음은 전체 클래스 여러 가지 유용한 방법은 소켓을 달성하기 위해 제공된다.


ServerSocket의 클래스 메서드

서버 포트에 대한 java.net.ServerSocket의 클래스를 사용하여 응용 프로그램과 클라이언트 요청을 수신합니다.

ServerSocket의 클래스는 네 개의 생성자가 있습니다 :

아니오. 방법 설명
(1) 공공 ServerSocket의 (INT 포트) IOException가 슬로우
만들기 서버 소켓의 특정 포트에 바인딩.
공공 ServerSocket의 (INT 포트, INT 잔고는 ) IOException가 슬로우
지정된 백 로그로 서버 소켓을 작성해, 지정된 로컬 포트 ​​번호에 바인드합니다.
3 공공 ServerSocket의 (INT 포트, INT 잔고는 ,의 InetAddress 주소) IOException가 슬로우
지정된 포트를 사용하여 백 로그를 듣고, 생성 된 서버의 로컬 IP 주소에 바인딩.
4 공공 ServerSocket의 ()는 IOException가 슬로우
언 바운드 서버 소켓을 작성합니다.

언 바운드 서버 소켓을 작성합니다. ServerSocket의 생성자 메서드가 예외를 throw하지 않는 경우,이 응용 프로그램이 성공적으로 지정된 포트에 바인딩 된 것을 의미하고, 클라이언트 요청을 수신합니다.

다음은 몇 가지 일반적인 방법의 ServerSocket의 클래스입니다 :

아니오. 방법 설명
(1) 공공 INT getLocalPort ()
이 소켓이 접속을 대기 중의 포트를 돌려줍니다.
공공 소켓 (동의)는 IOException가 슬로우
그는 수신하고이 소켓을 받아들입니다.
3 공공 무효에 setSoTimeout (INT 시간 초과)
밀리 초 단위로 활성화 / SO_TIMEOUT을 사용하지 않도록 시간 제한 값을 지정하여.
4 공공 무효 바인드 (SocketAddress를 호스트, INT의 백 로그)
특정 주소 (IP 주소 및 포트 번호) ServerSocket의 바인딩.

소켓 클래스 메소드

클라이언트와 서버의 java.net.Socket의 클래스 대신 소켓에서 서로 통신한다. 인스턴스 및 서버에서 클라이언트 소켓 객체를 얻기 위해 소켓 객체가 동의 () 메소드 값으로 리턴하세요.

Socket 클래스는 다섯 생성자가 있습니다.

아니오. 방법 설명
(1) 공공 소켓 (문자열 호스트, INT 포트 ) UnknownHostException의, IOException이 발생합니다.
스트림 소켓을 작성해, 지정된 호스트의 지정된 포트 번호에 접속합니다.
공공 소켓 (InetAddress를 호스트, INT 포트 ) IOException가 슬로우
스트림 소켓을 작성하여 지정된 포트 번호의 지정된 IP 주소로 연결합니다.
3 공공 소켓 (문자열 호스트, INT 포트 ,의 InetAddress localAddress, INT의 localPort)는 IOException이 발생합니다.
소켓을 작성해, 지정된 원격 호스트의 지정된 원격 포트에 연결합니다.
4 공공 소켓 (InetAddress를 호스트, INT 포트 ,의 InetAddress localAddress, INT의 localPort)는 IOException이 발생합니다.
소켓을 작성해, 지정된 원격 주소에 지정된 원격 포트에 연결합니다.
(5) 공공 소켓 ()
접속되어 있지 않은 소켓, 시스템 기본 형식을 만듭니다 SocketImpl를

소켓 생성자 반환, 단순히 소켓 객체를 인스턴스화 할 때, 실제로는 지정된 서버 및 포트에 연결을 시도합니다.

여기에 관심있는 몇 가지 방법이 있습니다 클라이언트에주의를 지불하고 서버에 관계없이 클라이언트의 소켓 객체가 있거나 서버가 이러한 메소드를 호출 할 수 있습니다.

아니오. 방법 설명
(1) 공공 무효 연결 (SocketAddress를 호스트, INT의 시간 초과) IOException가 슬로우
이 소켓 서버에 연결, 그리고 시간 제한 값을 지정합니다.
공공의 InetAddress getInetAddress ()
소켓 연결의 리턴 어드레스.
3 공공 INT getPort ()
반환이 소켓은 원격 포트에 접속된다.
4 공공 INT getLocalPort ()
반환이 소켓은 로컬 포트에 바인딩됩니다.
(5) 공공 않은 SocketAddress getRemoteSocketAddress ()
이 연결되지 않은 반환 null의 경우 엔드 포인트의 반환 주소는이 소켓이 연결되어 있습니다.
6 공공의 InputStream는 getInputStream ()는 IOException가 슬로우
이 소켓의 입력 스트림을 돌려줍니다.
(7) 공공의 OutputStream로 getOutputStream ()는 IOException가 슬로우
이 소켓의 출력 스트림을 돌려줍니다.
8 공공 무효 가까운 ()는 IOException가 슬로우
이 소켓을 닫습니다.

의 InetAddress 클래스 메서드

이 클래스는 인터넷 프로토콜 (IP) 주소를 나타냅니다. 아래에 나열된 유용 때 소켓 프로그래밍 방법 :

아니오. 방법 설명
(1) 정적의 InetAddress getByAddress (바이트 [] 요지 )
원시 IP 주소가 주어진 경우의 InetAddress 오브젝트를 돌려줍니다.
정적의 InetAddress getByAddress (문자열 호스트, 바이트 [] 요지)
공급의 InetAddress 호스트 이름과 IP 주소를 생성하는 방법.
3 정적의 InetAddress getByName (문자열 호스트)
소정의 호스트 이름의 경우에, 호스트의 IP 주소를 결정한다.
4 문자열 getHostAddress ()
IP 주소 문자열 (텍스트 표현)를 돌려줍니다.
(5) 문자열 getHostName의 ()
이 IP 주소의 호스트 이름을 가져옵니다.
6 정적의 InetAddress에는 getLocalHost ()
로컬 호스트를 돌려줍니다.
(7) 문자열 toString ()
이 IP 주소를 String로 변환합니다.

소켓 클라이언트 인스턴스

다음 GreetingClient 서버에 소켓을 연결 응답을 대기 한 후, 요청을 전송하는 클라이언트 프로그램이다.

// 文件名 GreetingClient.java

import java.net.*;
import java.io.*;
 
public class GreetingClient
{
   public static void main(String [] args)
   {
      String serverName = args[0];
      int port = Integer.parseInt(args[1]);
      try
      {
         System.out.println("Connecting to " + serverName
                             + " on port " + port);
         Socket client = new Socket(serverName, port);
         System.out.println("Just connected to "
                      + client.getRemoteSocketAddress());
         OutputStream outToServer = client.getOutputStream();
         DataOutputStream out =
                       new DataOutputStream(outToServer);
 
         out.writeUTF("Hello from "
                      + client.getLocalSocketAddress());
         InputStream inFromServer = client.getInputStream();
         DataInputStream in =
                        new DataInputStream(inFromServer);
         System.out.println("Server says " + in.readUTF());
         client.close();
      }catch(IOException e)
      {
         e.printStackTrace();
      }
   }
}

소켓 서버 인스턴스

다음 GreetingServer 프로그램은 지정된 포트에서 수신 대기 소켓을 사용하는 서버 측 응용 프로그램입니다.

// 文件名 GreetingServer.java

import java.net.*;
import java.io.*;

public class GreetingServer extends Thread
{
   private ServerSocket serverSocket;
   
   public GreetingServer(int port) throws IOException
   {
      serverSocket = new ServerSocket(port);
      serverSocket.setSoTimeout(10000);
   }

   public void run()
   {
      while(true)
      {
         try
         {
            System.out.println("Waiting for client on port " +
            serverSocket.getLocalPort() + "...");
            Socket server = serverSocket.accept();
            System.out.println("Just connected to "
                  + server.getRemoteSocketAddress());
            DataInputStream in =
                  new DataInputStream(server.getInputStream());
            System.out.println(in.readUTF());
            DataOutputStream out =
                 new DataOutputStream(server.getOutputStream());
            out.writeUTF("Thank you for connecting to "
              + server.getLocalSocketAddress() + "\nGoodbye!");
            server.close();
         }catch(SocketTimeoutException s)
         {
            System.out.println("Socket timed out!");
            break;
         }catch(IOException e)
         {
            e.printStackTrace();
            break;
         }
      }
   }
   public static void main(String [] args)
   {
      int port = Integer.parseInt(args[0]);
      try
      {
         Thread t = new GreetingServer(port);
         t.start();
      }catch(IOException e)
      {
         e.printStackTrace();
      }
   }
}

포트 번호는 6066입니다 사용, 위의 자바 코드를 컴파일하고 서비스를 시작하려면 다음 명령을 실행합니다 :

$ java GreetingServer 6066
Waiting for client on port 6066...
다음 클라이언트 같은 오픈 일 :
$ java GreetingClient localhost 6066
Connecting to localhost on port 6066
Just connected to localhost/127.0.0.1:6066
Server says Thank you for connecting to /127.0.0.1:6066
Goodbye!