基於UTP的Socket程式設計(基礎)
阿新 • • 發佈:2018-11-25
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); } }