최고의 자바 네트워크 프로그래밍 튜토리얼 2024년, 이 튜토리얼에서는 소켓 프로그래밍,ServerSocket의 클래스 메서드,소켓 클래스 메소드,의 InetAddress 클래스 메서드,소켓 클라이언트 인스턴스,소켓 서버 인스턴스,를 배울 수 있습니다.
네트워크 프로그래밍 여러 장치 (컴퓨터) 프로그램의 실행을 작성하는 것을 의미한다, 이러한 장치는 네트워크를 통해 연결되어있다.
하는 J2SE API의 java.net 패키지는 낮은 수준의 통신 정보를 제공하는 클래스와 인터페이스가 포함되어 있습니다. 당신은 문제 해결에 초점을 맞출 것이 아니라 통신의 세부 사항에 초점이 클래스와 인터페이스를 사용할 수 있습니다.
java.net 패키지는 두 가지 일반적인 네트워크 프로토콜에 대한 지원을 제공합니다 :
이 튜토리얼은 다음과 같은 두 가지 내용을 설명합니다.
소켓은 TCP는 두 시스템 사이의 통신 메커니즘을 제공 사용한다. 클라이언트 프로그램은 소켓을 만들고 서버 소켓에 연결하려고합니다.
연결이 설정되면, 서버는 소켓 객체를 생성합니다. 클라이언트 및 서버는 이제 쓸 수와 통신 할 수있는 Socket 객체를 읽을 수 있습니다.
java.net.Socket의 클래스는 소켓을 나타내고, 클라이언트 서버 프로그램을 수신하고, 그들과 함께 연결하는 메커니즘을 구축하는 java.net.ServerSocket의 클래스를 제공합니다.
다음 단계를 사용하여 TCP 연결이 두 컴퓨터 간의 소켓을 설정할 때 발생 :
데이터는 동시에 두 개의 데이터 스트림을 통해 전송 될 수 있도록 TCP는 쌍방향 통신 프로토콜이다. 다음은 전체 클래스 여러 가지 유용한 방법은 소켓을 달성하기 위해 제공된다.
서버 포트에 대한 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가 슬로우 이 소켓을 닫습니다. |
이 클래스는 인터넷 프로토콜 (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() + "ko."); 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 6066ko.다음 클라이언트 같은 오픈 일 :
$ 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!