ネットワークプログラミング:UDP-データの受信と送信

3084 ワード

UDPを使用したネットワークプログラミングには、DatagramSocketとDatagramPacketの2つの重要なクラスが必要です.
DatagramSocket:送信側または受信側のソケットを作成し、使用するポートを指定します.
DatagramPacket:受信または送信のためのパケット.
ネットワークプログラミングを行う過程ですべてバイト配列を核心とするプログラミングであり,送信側でバイト配列をパケット化して受信側に送信する.受信側で受信したパケットをデータ配列にカプセル化し,バイト配列を解析する.
送信側基本手順:
(1)DatagramSocketでポート番号を指定し、送信側ソケットを作成する
(2)操作データ、バイト配列への変換
(3)DatagrameSocketを用いてバイト配列をパケット化し,宛先を指定する
(4)パケットの送信
(5)リソースのクローズ
受信側基本手順:
(1)DatagramSocketでポート番号を指定し、送信側ソケットを作成する
(2)コンテナを用意し,DatagrameSocketを用いてパケットを受信する
(3)受信したパケットをバイト配列に変換する
(4)分析データ
(5)リソースの解放
package Net;

import java.io.BufferedOutputStream;
import java.io.ByteArrayOutputStream;
import java.io.ObjectOutputStream;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;

/**
 *     :   
 * 
 * @author zhaoy
 *
 */
public class Test04_client {
	public static void main(String[] args) throws Exception {
		System.out.println("      。。。。");
		//   DatagramStocket          
		DatagramSocket client = new DatagramSocket(8888);
		ByteArrayOutputStream bos = new ByteArrayOutputStream();
		ObjectOutputStream oos = new ObjectOutputStream(new BufferedOutputStream(bos));
		//            
		Employee em = new Employee("  ", 25);
		oos.writeObject(em);
		oos.flush();
		byte[] datas = bos.toByteArray();
		//          
		DatagramPacket packet = new DatagramPacket(datas, datas.length, new InetSocketAddress("localhost", 9999));
		client.send(packet);
		client.close();
	}
}

 
package Net;

import java.io.BufferedInputStream;
import java.io.ByteArrayInputStream;
import java.io.ObjectInputStream;
import java.net.DatagramPacket;
import java.net.DatagramSocket;

/**
 *     :   
 * 
 * @author zhaoy
 *
 */
public class Test04_server {
	public static void main(String[] args) throws Exception {
		System.out.println("      。。。");
		//   DatagramSocket           
		DatagramSocket server = new DatagramSocket(9999);
		//        DatagramSocket   
		byte[] container = new byte[1024 * 60];
		DatagramPacket packet = new DatagramPacket(container, 0, container.length);
		server.receive(packet);
		//     
		byte[] datas = packet.getData();
		ObjectInputStream ois = new ObjectInputStream(new BufferedInputStream(new ByteArrayInputStream(datas)));
		Object em = ois.readObject();
		if (em instanceof Employee) {
			Employee emo = (Employee) em;
			System.out.println("name:" + emo.getName());
			System.out.println("age:" + emo.getAge());
		}
	}
}
package Net;

import java.io.Serializable;

/**
 * Javabean
 * 
 * @author zhaoy
 *
 */
public class Employee implements Serializable {
	private String name;
	private int age;

	public Employee(String name, int age) {
		super();
		this.name = name;
		this.age = age;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

}