1. 程式人生 > >基於UTP的Socket程式設計(基礎)

基於UTP的Socket程式設計(基礎)

User

package com.imooc.UTPReturn;

import java.io.Serializable;

public class User implements Serializable{
	
	private String username;
	
	private String password;

	public User(String username, String password) {
		
		this.username = username;
		this.password = password;
	}

	@Override
	public String toString() {
		return "User [username=" + username + ", password=" + password + "]";
	}

	public String getUsername() {
		return username;
	}

	public void setUsername(String username) {
		this.username = username;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}
	
	

}



Server

package com.imooc.UTPReturn;

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

public class UTPServer {

	public static void main(String[] args) throws Exception {

		/*
		 * 伺服器端接收客戶端的請求
		 */
		// 建立伺服器端DatagramSocket
		DatagramSocket socket = new DatagramSocket(8800);

		// 建立資料包
		byte[] data = new byte[1024];
		DatagramPacket packet = new DatagramPacket(data, data.length);

		// 伺服器端已經啟動...
		System.out.println("伺服器端已經 啟動....");
		socket.receive(packet);// 接收資料

		// 讀取客戶端發來的資料
		// String str=new String(data, 0, packet.getLength());
		// System.out.println("我是伺服器,客戶端說:"+str);

		// bytearray to object
		ByteArrayInputStream bi = new ByteArrayInputStream(data);
		ObjectInputStream oi = new ObjectInputStream(bi);

		User user = (User)oi.readObject();
		bi.close();
		oi.close();
		System.out.println(user.toString());
		
		

		/*
		 * 伺服器端迴應客戶端
		 */
		// 給客戶端發出響應
		byte[] responseData = null;
		responseData = "歡迎你".getBytes();
		InetAddress address = packet.getAddress();
		int port = packet.getPort();

		DatagramPacket responsePacket = new DatagramPacket(responseData,
				responseData.length, address, port);

		socket.send(responsePacket);

		// 關閉資源
		socket.close();
	}

}

Client

package com.imooc.UTPReturn;

import java.io.ByteArrayOutputStream;
import java.io.ObjectOutputStream;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

public class UTPClient {

	public static void main(String[] args) throws Exception {
		/*
		 * 客戶端向伺服器端傳送資料
		 */
		// 定義資料報的地址,埠,資料
		InetAddress address = InetAddress.getByName("localhost");
		int port = 8800;
		// 定義資料報的內容
		// byte[] data="使用者名稱admin,密碼123".getBytes();
		User user = new User("張三", "123");
		byte[] data = null;
		
		
		// object to bytearray
		ByteArrayOutputStream bo = new ByteArrayOutputStream();
		ObjectOutputStream oo = new ObjectOutputStream(bo);
		oo.writeObject(user);
		data = bo.toByteArray();

		bo.close();
		oo.close();
		// 建立資料報
		DatagramPacket packet = new DatagramPacket(data, data.length, address,
				port);

		// 建立DatagramSocket物件
		DatagramSocket socket = new DatagramSocket();

		// 傳送資料報
		socket.send(packet);

		/*
		 * 客戶端接收伺服器端的迴應
		 */
		socket.receive(packet);

		String responseStr = new String(data, 0, packet.getLength());
		System.out.println("我是客戶端,伺服器端迴應說:" + responseStr);

	}

}