程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Java中應用Socket發送Java對象實例

Java中應用Socket發送Java對象實例

編輯:關於JAVA

Java中應用Socket發送Java對象實例。本站提示廣大學習愛好者:(Java中應用Socket發送Java對象實例)文章只能為提供參考,不一定能成為您想要的結果。以下是Java中應用Socket發送Java對象實例正文


之前寫聊天法式都是用字符串加個標記就直接發送到辦事器,然後轉發了。
如今請求我用對象流直接發送對象,測試了一下,記載一下。
其實我更偏向用json發送對象的,json說白了也是字符串,等有空了好好研討研討。
重要功效:客戶端給辦事器發送個對象,辦事器吸收到了打印出來。反過去是差不多了,就不寫了。

下面是全體架構。
User類就兩個屬性。


package com.qiantu.bean;

import java.io.Serializable;

public class User implements Serializable {
 private static final long serialVersionUID = 1L;
 private String name;
 private String password;
 
 public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = name;
 }
 public String getPassword() {
  return password;
 }
 public void setPassword(String password) {
  this.password = password;
 }
}

辦事器端:吸收客戶端發送過去的user對象:


package test;

import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.net.ServerSocket;
import java.net.Socket;

import com.qiantu.bean.User;

public class TestServer {
 public void start() {
  try {
   ServerSocket ss = new ServerSocket(7777);
   System.out.println("start to accept...");
   Socket socket = ss.accept();
   
   //樹立輸出流
   ObjectInputStream ois = new ObjectInputStream(
              new BufferedInputStream(socket.getInputStream())); 
            Object obj = ois.readObject(); 
            if (obj != null) { 
                User user = (User)obj;//把吸收到的對象轉化為user
                System.out.println("user: " + user.getName()); 
                System.out.println("password: " + user.getPassword());
            } 
            ois.close();
            socket.close();
            ss.close();
  } catch (IOException e) {
   e.printStackTrace();
  } catch (ClassNotFoundException e) {
   e.printStackTrace();
  }
 }
 
 public static void main(String[] args) {
  new TestServer().start();
 }
}

客戶端:給辦事器端發送user對象:


package client;

import java.io.IOException;
import java.io.ObjectOutputStream;
import java.net.Socket;
import java.net.UnknownHostException;

import com.qiantu.bean.User;

public class TestClient {
 public static void main(String[] args) {
  new TestClient().start();
 }

 public void start() {
  try {
   Socket socket = new Socket("127.0.0.1", 7777);
   //樹立輸出流
   ObjectOutputStream oos = new ObjectOutputStream(socket
     .getOutputStream());
   User user = new User();
   user.setName("梁國俏");
   user.setPassword("123456");
   //輸出對象, 必定要flush()
   oos.writeObject(user);
   oos.flush();
   
   oos.close();
   socket.close();
  } catch (UnknownHostException e) {
   e.printStackTrace();
  } catch (IOException e) {
   e.printStackTrace();
  }
 }
}


運轉成果:

要留意的處所:
《1》實體類要完成Serializable類,添加標識serialVersionUID。
《2》發送對象以後要flush();
《3》這個比擬主要,弄了我半天不曉得哪裡失足,言來是這個。
辦事器端和客戶端雙方的實體類要如出一轍,類名一樣,包名也要一樣。我就是由於包名紛歧樣弄了良久。。。。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved