四十二、Javaネットワークプログラミングの浅い分析
6674 ワード
1.ネットワークプログラミングの基本概念
ネットワークプログラミングは物理的に一緒にいないホストを相互接続させ、ネットワーク接続過程はネットワークプロトコルを使用する必要があり、よく見られる通信プロトコルはTCP、UDPプロトコルである. TCP:信頼できる接続に属する、三者握手で接続の確認を完了する. UDP:信頼できない接続に属する.
ネットワークの開発には2つのアーキテクチャがある:C/SとB/S.
2.単純TCPプログラム実現
ネットワーク開発パッケージが存在するクラスはjavaです.Net開発パッケージこのパッケージでは、Server Socket、Socketクラスを使用して、サーバとクライアントの開発を完了できます.TCPプログラムを開発するには、まずサーバ側を開発し、サーバSocketを用いてクライアントの接続受信を行い、各クライアントはプログラム上でSocketオブジェクト表示を用いる.
Serverコード:
Clientコードの例:
3.echoプログラム実装
Severコードの例:
Clientコードの例:
このコードは、単一スレッドの接続アクセスにのみ適する.さらに最適化することができる.
4.マルチスレッドのechoプログラム
サーバコードの例:
①EchoThreadコード
②EchoServerコード
:このプログラムはマルチスレッドへのアクセスを実現します.
.
5.UDPプログラム実装
UDPのプログラムはデータ・レポートの形式で現れ、以下の2つのクラスに使用する必要があります.データ・レポートの内容:DatagramPacket データ・レポートの送信と受信:DatagramSocket クライアントコード:
サーバ側コード:
20150529
JAVA学習ノートシリーズ
--------------------------------------------
連絡先
--------------------------------------------
Weibo: ARESXIONG
E-Mail: [email protected]
------------------------------------------------
ネットワークプログラミングは物理的に一緒にいないホストを相互接続させ、ネットワーク接続過程はネットワークプロトコルを使用する必要があり、よく見られる通信プロトコルはTCP、UDPプロトコルである.
ネットワークの開発には2つのアーキテクチャがある:C/SとB/S.
2.単純TCPプログラム実現
ネットワーク開発パッケージが存在するクラスはjavaです.Net開発パッケージこのパッケージでは、Server Socket、Socketクラスを使用して、サーバとクライアントの開発を完了できます.TCPプログラムを開発するには、まずサーバ側を開発し、サーバSocketを用いてクライアントの接続受信を行い、各クライアントはプログラム上でSocketオブジェクト表示を用いる.
Serverコード:
package com.ares.demo.helloserver;
import java.io.OutputStream;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;
public class HelloServer {
public static void main(String[] args) throws Exception {
ServerSocket server = new ServerSocket(8888); // 8888
Socket client = null; //
System.out.println(" ... ...");
client = server.accept(); //
OutputStream out = client.getOutputStream(); //
PrintStream pout = new PrintStream(out);
pout.println("hello world!!!");
pout.close();
out.close();
client.close();
server.close();
}
}
Clientコードの例:
package com.ares.demo.helloserver;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.Socket;
public class HelloClient {
public static void main(String[] args) throws Exception {
Socket client = new Socket("localhost", 8888);//
BufferedReader buf = null;
buf = new BufferedReader(new InputStreamReader(client.getInputStream()));
String str = buf.readLine();//
System.out.println(" :" + str);
client.close();
}
}
3.echoプログラム実装
Severコードの例:
package com.ares.demo.echoserver;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;
public class EchoServer {
public static void main(String[] args) throws Exception {
ServerSocket server = new ServerSocket(8888); // 8888
Socket client = null; //
boolean flag = true;
while (flag) {
System.out.println(" ... ...");
client = server.accept(); //
BufferedReader buf = new BufferedReader(new InputStreamReader(
client.getInputStream()));
PrintStream pout = new PrintStream(client.getOutputStream());
//
boolean temp = true;
while (temp) {//
String str = buf.readLine();
if (str == null || "".equals(str)) {
temp = false;
break;
}
if ("bye".equals(str)) {
temp = false;
break;
}
pout.println("ECHO:" + str); //
}
pout.close();
client.close();
}
server.close();
}
}
Clientコードの例:
package com.ares.demo.echoserver;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.Socket;
public class EchoClient {
public static void main(String[] args) throws Exception {
Socket client = new Socket("localhost", 8888);//
BufferedReader input = new BufferedReader(new InputStreamReader(
System.in));
BufferedReader buf = null;
buf = new BufferedReader(new InputStreamReader(client.getInputStream()));
PrintStream out = new PrintStream(client.getOutputStream());
boolean flag = true;
while (flag) {
System.out.print(" :") ;
String str = input.readLine();//
if (str == null || "".equals(str)) {
flag = false;
break;
}
if ("bye".equals(str)) {
flag = false;
break;
}
out.println(str) ;
System.out.println(buf.readLine()) ;
}
client.close();
}
}
このコードは、単一スレッドの接続アクセスにのみ適する.さらに最適化することができる.
4.マルチスレッドのechoプログラム
サーバコードの例:
①EchoThreadコード
package com.ares.demo.echothreadserver;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.Socket;
public class EchoThread implements Runnable {
private Socket client;
public EchoThread(Socket client) {
this.client = client;
}
public void run() {
try {
BufferedReader buf = new BufferedReader(new InputStreamReader(
client.getInputStream()));
PrintStream pout = new PrintStream(client.getOutputStream());
//
boolean temp = true;
while (temp) {//
String str = buf.readLine();
if (str == null || "".equals(str)) {
temp = false;
break;
}
if ("bye".equals(str)) {
temp = false;
break;
}
pout.println("ECHO:" + str); //
}
pout.close();
client.close();
} catch (Exception e) {
}
}
}
②EchoServerコード
package com.ares.demo.echothreadserver;
import java.net.ServerSocket;
public class EchoServer {
public static void main(String[] args) throws Exception {
ServerSocket server = new ServerSocket(8888); // 8888
boolean flag = true;
while (flag) {
System.out.println(" ... ...");
new Thread(new EchoThread(server.accept())).start() ;
}
server.close();
}
}
注:このプログラムはマルチスレッドへのアクセスを実現します.
.
5.UDPプログラム実装
UDPのプログラムはデータ・レポートの形式で現れ、以下の2つのクラスに使用する必要があります.
package com.ares.demo.udpdemo;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
public class UDPSend {
public static void main(String[] args) throws Exception {
DatagramSocket socket = new DatagramSocket(9000);
// 9000
String str = "hello world!!!";
DatagramPacket pack = new DatagramPacket(str.getBytes(), 0, str
.length(), InetAddress.getLocalHost(), 3000);// 1024
//3000
socket.send(pack);
}
}
サーバ側コード:
package com.ares.demo.udpdemo;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
public class UDPReceive {
public static void main(String[] args) throws Exception {
DatagramSocket socket = new DatagramSocket(3000);
// 3000
DatagramPacket pack = new DatagramPacket(new byte[1024], 1024);
// 1024
socket.receive(pack);
System.out.println(" :" + new String(pack.getData())) ;
}
}
20150529
JAVA学習ノートシリーズ
--------------------------------------------
連絡先
--------------------------------------------
Weibo: ARESXIONG
E-Mail: [email protected]
------------------------------------------------