高度なチュートリアル - - 05.ネットワークプログラミングのJava入門

オリジナル住所:http://www.work100.net/training/java-networking.html
その他のチュートリアル:ビーム雲-無料講座

ネットワークプログラミング

いいえ。 記事のセクション ビデオ
1 アウトライン
2 ソケットプログラミング
3 ServerSocketの方法
4 Socketクラスのメソッド
5 InetAddressクラスメソッド
6 ソケットクライアントインスタンス
7 ソケットサーバーインスタンス

上記をご参照ください章节导航読み取るために

1.概要

ネットワークは、これらのデバイスのデバイス(コンピュータ)の複数の上で実行するように書かれたプログラムは、ネットワークを介して接続されている手段をプログラミングします。

java.netJ2SEパッケージは、通信の低レベルの詳細を提供するAPIのクラスおよびインタフェースを含んでいます。あなたは、むしろ通信の詳細に焦点を当てるよりも、問題の解決に焦点を当て、これらのクラスやインタフェースを使用することができます。

java.net パッケージには2つの一般的なネットワークプロトコルをサポートしています。

  • TCPはTCP2つのアプリケーション間の通信の信頼性を保証して伝送制御プロトコルの略です。一般的にインターネット・プロトコルを使用し、呼ばれていますTCP / IP
  • UDPはUDPユーザデータグラムプロトコル、コネクションレスプロトコルの略です。アプリケーション間で送信されるパケットデータを提供します。

このチュートリアルでは、次の2つのトピックについて説明します。

  • ソケットプログラミング:これは、最も広く使用されているネットワークの概念である、それは非常に詳細に解釈する必要があります。

  • URLの取り扱い:このセクションでは、より詳細にJava言語を学ぶためにここにクリックし、ここでは別の空間に話すだろうURL処理

2.Socketプログラミング

使用ソケットは、TCP2台のコンピュータ間の通信メカニズムを提供します。クライアントプログラムは、ソケットを作成し、サーバーソケットに接続しようとします。

接続が確立されると、サーバーが作成しSocketたオブジェクトを。クライアントとサーバーは、今できるSocketオブジェクトを書いて読んでコミュニケーション。

java.net.Socketクラスは、ソケットを表し、java.net.ServerSocketクラスがそれに接続されたクライアントプログラムとメカニズムをリッスンするようにサーバーを提供します。

2台のコンピュータ間のソケットを確立するために、次の手順を使用TCPする場合、接続を発生します。

  • サーバインスタンスServerSocketサーバによっての通信ポートを表すオブジェクトを
  • サーバーは、呼び出すServerSocketクラスのaccept()クライアントが指定したポート上のサーバーに接続するまでの方法が待機します
  • サーバーは、インスタンス化するクライアントを待っているときにSocket、接続を要求するために、サーバー名とポート番号を指定するオブジェクトを
  • Socketクラスのコンストラクタは、指定されたサーバーとポート番号にクライアントを接続しよう。通信が確立されている場合は、クライアントの作成Socketオブジェクトがサーバーと通信することができます。
  • サーバー側では、accept()この方法は、新しいサーバーを返すsocket参照、socketクライアントに接続されていますsocket

接続が確立された後、使用してI/O実行される流れ連通を、それぞれ、socketストリームとストリーム出力、サーバーの入力ストリーム、クライアントサーバ出力ストリームへの入力ストリームに出力する入力ストリームクライアントを有します。

TCPこれは、データ・ストリームは、2件のデータが同時に送信することができるように、双方向通信プロトコルである。以下では、達成するために有用な方法の完全なセットを提供するために、クラスの一部ですsocket

クラスメソッド3.ServerSocket

サーバーの使用して、アプリケーションjava.net.ServerSocketのポートを取得するには、クラスを、クライアントの要求を待機。

ServerSocket 4クラスのコンストラクタがあります。

いいえ。 方法について説明します
1 public ServerSocket(int port) throws IOException
指定されたポート上にサーバソケットを作成します。
2 public ServerSocket(int port, int backlog) throws IOException
で指定されたbacklogサーバソケットと指定されたローカルポート番号にバインドして作成します。
3 public ServerSocket(int port, int backlog, InetAddress address) throws IOException
指定されたポートを使用して、耳を傾けbacklog、地元にバインドするIPサーバアドレスを作成します。
4 public ServerSocket() throws IOException
バインドされていないサーバソケットを作成します。

バインドされていないサーバソケットを作成します。場合はServerSocket、コンストラクタが例外をスローしません、それはあなたのアプリケーションが正常にクライアント要求を指定されたポートおよびリッスンにバインドされていることを意味します。

ここではいくつかあるServerSocketクラスの一般的に使用される方法は:

いいえ。 方法について説明します
1 public int getLocalPort()
このソケットが待機しているポートを返します。
2 public Socket accept() throws IOException
聞くと、このソケットへの接続を受け入れます。
3 public void setSoTimeout(int timeout)
指定されたタイムアウトの有効/無効をSO_TIMEOUTミリ秒単位で。
4 public void bind(SocketAddress host, int backlog)
それはなりますServerSocket特定のアドレス(にバインドIP地址して端口号)。

クラスメソッド4.Socket

java.net.Socketクライアントとサーバーのソケットのクラス代行は、相互に通信するために使用しました。クライアント取得するにはSocket、オブジェクトがインスタンス化されることで、サーバが取得しSocketて、被写体accept()の戻り値を。

Socket 5クラスのコンストラクタがあります。

いいえ。 方法について説明します
1 public Socket(String host, int port) throws UnknownHostException, IOException
ストリームソケットを作成し、指定に接続主机上の指定端口号
2 public Socket(InetAddress host, int port) throws IOException
ストリームソケットを作成し、指定されたに接続しIP地址指定端口号
3 public Socket(String host, int port, InetAddress localAddress, int localPort) throws IOException
ソケットを作成し、指定されたリモートホスト上の指定されたリモートポートに接続します。
4 public Socket(InetAddress host, int port, InetAddress localAddress, int localPort) throws IOException
ソケットを作成し、指定されたリモートアドレスに指定されたリモートポートに接続します。
5 public Socket()
デフォルトでは、タイプはSocketImplソケットを作成するために接続されていません

場合はSocket、コンストラクタに戻り、ないの簡単な例Socketオブジェクトは、それが実際にサーバと指定されたポートに接続しようとします。

下面列出了一些感兴趣的方法,注意客户端和服务器端都有一个 Socket 对象,所以无论客户端还是服务端都能够调用这些方法。

序号 方法描述
1 public void connect(SocketAddress host, int timeout) throws IOException
将此套接字连接到服务器,并指定一个超时值。
2 public InetAddress getInetAddress()
返回套接字连接的地址。
3 public int getPort()
返回此套接字连接到的远程端口。
4 public int getLocalPort()
返回此套接字绑定到的本地端口。
5 public SocketAddress getRemoteSocketAddress()
返回此套接字连接的端点的地址,如果未连接则返回 null
6 public InputStream getInputStream() throws IOException
返回此套接字的输入流。
7 public OutputStream getOutputStream() throws IOException
返回此套接字的输出流。
8 public void close() throws IOException
关闭此套接字。

5.InetAddress类的方法

这个类表示互联网协议(IP)地址。下面列出了 Socket 编程时比较有用的方法:

序号 方法描述
1 static InetAddress getByAddress(byte[] addr)
在给定原始 IP 地址的情况下,返回 InetAddress 对象。
2 static InetAddress getByAddress(String host, byte[] addr)
根据提供的主机名和 IP 地址创建 InetAddress
3 static InetAddress getByName(String host)
在给定主机名的情况下确定主机的 IP 地址。
4 String getHostAddress()
IP 地址字符串(以文本表现形式)。
5 String getHostName()
获取此 IP 地址的主机名。
6 static InetAddress getLocalHost()
返回本地主机。
7 String toString()
将此 IP 地址转换为 String

6.Socket客户端实例

如下的 GreetingClient 是一个客户端程序,该程序通过 socket 连接到服务器并发送一个请求,然后等待一个响应。

// 文件名 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("连接到主机:" + serverName + " ,端口号:" + port);
         Socket client = new Socket(serverName, port);
         System.out.println("远程主机地址:" + 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("服务器响应: " + in.readUTF());
         client.close();
      }catch(IOException e)
      {
         e.printStackTrace();
      }
   }
}

7.Socket服务端实例

如下的 GreetingServer 程序是一个服务器端应用程序,使用 Socket 来监听一个指定的端口。

// 文件名 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("等待远程连接,端口号为:" + serverSocket.getLocalPort() + "...");
            Socket server = serverSocket.accept();
            System.out.println("远程主机地址:" + server.getRemoteSocketAddress());
            DataInputStream in = new DataInputStream(server.getInputStream());
            System.out.println(in.readUTF());
            DataOutputStream out = new DataOutputStream(server.getOutputStream());
            out.writeUTF("谢谢连接我:" + 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.run();
      }catch(IOException e)
      {
         e.printStackTrace();
      }
   }
}

编译以上两个 Java 文件代码,并执行以下命令来启动服务,使用端口号6066

$ javac GreetingServer.java 
$ java GreetingServer 6066
等待远程连接,端口号为:6066...

新开一个命令窗口,执行以上命令来开启客户端:

$ javac GreetingClient.java 
$ java GreetingClient localhost 6066
连接到主机:localhost ,端口号:6066
远程主机地址:localhost/127.0.0.1:6066
服务器响应: 谢谢连接我:/127.0.0.1:6066
Goodbye!

前:シリアル化

次へ:メール

おすすめ

転載: www.cnblogs.com/liuxiaojun/p/training-java-networking.html