您好,登錄后才能下訂單哦!
這篇文章主要介紹“java怎么通過TCP協議傳輸javabean對象”,在日常操作中,相信很多人在java怎么通過TCP協議傳輸javabean對象問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”java怎么通過TCP協議傳輸javabean對象”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
javabean
package tcp.entity; import java.io.Serializable; public class User implements Serializable { /** * */ private static final long serialVersionUID = 1L; private String username; private String 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; } public User(String username, String password) { super(); this.username = username; this.password = password; } public User() { super(); } }
客戶端
package tcp.client; import java.io.DataInputStream; import java.io.IOException; import java.io.ObjectOutputStream; import java.net.Socket; import java.util.Scanner; import tcp.entity.User; public class MyClient { public static void main(String[] args) { System.out.println("-----------客戶端啟動...------------"); Socket client = null; try { Scanner sc = new Scanner(System.in); while (true) { User user = null; String str = null; System.out.println("請輸入用戶名:"); str = sc.nextLine(); if (!"".equals(str)) { user = new User(); user.setUsername(str); } else { continue; } System.out.println("請輸入用戶密碼:"); str = sc.nextLine(); user.setPassword(str); client = new Socket("localhost", 8848); // 一新建對象就會向服務器發起TCP連接 /** * 注意:如果使用BufferedOutputStream提高效率,那么需要在write輸出完成后調用flush()將緩存的數據真正輸出到網絡中去,否則將報找不到EOF結尾的異常。 */ ObjectOutputStream oos = new ObjectOutputStream(new BufferedOutputStream(client.getOutputStream())); DataInputStream dis = new DataInputStream(new BufferedInputStream(client.getInputStream())); oos.writeObject(user); // 發送到服務器 oos.flush(); System.out.println(dis.readUTF());// 從服務器接受回顯 System.out.print("是否退出?"); str = sc.nextLine(); if ("y".equalsIgnoreCase(str)) { break; } } } catch (IOException e) { e.printStackTrace(); } finally { try { if (client != null) client.close(); } catch (IOException e) { e.printStackTrace(); } } } }
服務器端
package tcp.server; import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; public class MyServer { public static void main(String[] args) { System.out.println("=================服務器啟動...==================="); ServerSocket server = null; try { server = new ServerSocket(8848); while (true) { // 偵聽端口等待客戶端連接 Socket client = server.accept(); // 阻塞。通過說明新產生了一個client。 new Thread(new LoginHandler(client)).start(); // 當LoginHandler()處理完后,當前client就被gc了。 } } catch (IOException e) { e.printStackTrace(); } finally { try { if (server != null) server.close(); } catch (IOException e) { e.printStackTrace(); } } } }
線程處理類
package tcp.server; import java.io.DataOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.ObjectInputStream; import java.io.OutputStream; import java.net.Socket; import tcp.entity.User; public class LoginHandler implements Runnable { private Socket client; @Override public void run() { InputStream is = null; OutputStream os = null; try { is = client.getInputStream(); os = client.getOutputStream(); /** * 注意:如果使用BufferedOutputStream提高效率,那么需要在write輸出完成后調用flush()將緩存的數據真正輸出到網絡中去,否則將報找不到EOF結尾的異常。 */ ObjectInputStream ois = new ObjectInputStream(new BufferedInputStream(is)); DataOutputStream dos = new DataOutputStream(new BufferedOutputStream(os)); // 反序列化 User user = (User) ois.readObject(); // 登陸判斷 if (user != null) { System.out.println("用戶 :" + user.getUsername() + "[" + client.getInetAddress().getHostAddress() + ":" + client.getPort() + "]" + "密碼:" + user.getPassword()); if ("cerana".equals(user.getUsername()) && "bulabula".equals(user.getPassword())) { dos.writeUTF("登陸成功"); dos.flush(); } else { dos.writeUTF("登陸失敗"); dos.flush(); } } else { System.out.println("反序列化失敗"); } } catch (IOException | ClassNotFoundException e) { e.printStackTrace(); } finally { try { if (os != null) os.close(); } catch (IOException e) { e.printStackTrace(); } try { if (is != null) is.close(); } catch (IOException e) { e.printStackTrace(); } } } public LoginHandler(Socket client) { super(); this.client = client; } }
到此,關于“java怎么通過TCP協議傳輸javabean對象”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。