オリジナル住所:http://www.work100.net/training/java-networking.html
その他のチュートリアル:ビーム雲-無料講座
ネットワークプログラミング
いいえ。 | 記事のセクション | ビデオ |
---|---|---|
1 | アウトライン | |
2 | ソケットプログラミング | |
3 | ServerSocketの方法 | |
4 | Socketクラスのメソッド | |
5 | InetAddressクラスメソッド | |
6 | ソケットクライアントインスタンス | |
7 | ソケットサーバーインスタンス |
上記をご参照ください章节导航
読み取るために
1.概要
ネットワークは、これらのデバイスのデバイス(コンピュータ)の複数の上で実行するように書かれたプログラムは、ネットワークを介して接続されている手段をプログラミングします。
java.net
J2SEパッケージは、通信の低レベルの詳細を提供するAPIのクラスおよびインタフェースを含んでいます。あなたは、むしろ通信の詳細に焦点を当てるよりも、問題の解決に焦点を当て、これらのクラスやインタフェースを使用することができます。
java.net
パッケージには2つの一般的なネットワークプロトコルをサポートしています。
- TCPは:
TCP
2つのアプリケーション間の通信の信頼性を保証して伝送制御プロトコルの略です。一般的にインターネット・プロトコルを使用し、呼ばれていますTCP / IP
。 - UDPは:
UDP
ユーザデータグラムプロトコル、コネクションレスプロトコルの略です。アプリケーション間で送信されるパケットデータを提供します。
このチュートリアルでは、次の2つのトピックについて説明します。
ソケットプログラミング:これは、最も広く使用されているネットワークの概念である、それは非常に詳細に解釈する必要があります。
URLの取り扱い:このセクションでは、より詳細にJava言語を学ぶためにここにクリックし、ここでは別の空間に話すだろう
URL
処理
2.Socketプログラミング
使用ソケットは、TCP
2台のコンピュータ間の通信メカニズムを提供します。クライアントプログラムは、ソケットを作成し、サーバーソケットに接続しようとします。
接続が確立されると、サーバーが作成し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!
前:シリアル化
次へ:メール