国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

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

2019-11-26 15:11:07
字體:
來源:轉載
供稿:網友

以前寫聊天程序都是用字符串加個標志就直接發送到服務器,然后轉發了。
現在要求我用對象流直接發送對象,測試了一下,記錄一下。
其實我更傾向用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》這個比較重要,搞了我半天不知道哪里出錯,言來是這個。
服務器端和客戶端兩邊的實體類要一模一樣,類名一樣,包名也要一樣。我就是因為包名不一樣搞了很久。。。。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 上杭县| 南华县| 镇巴县| 双桥区| 麻阳| 黔江区| 丹棱县| 柳江县| 岢岚县| 抚松县| 石屏县| 昌乐县| 安新县| 恭城| 杨浦区| 开封县| 高要市| 富川| 达日县| 壶关县| 宿州市| 商丘市| 济宁市| 兴义市| 英德市| 于都县| 阿拉善左旗| 定西市| 保靖县| 涿州市| 宜宾县| 房产| 高碑店市| 淮滨县| 黄石市| 呼伦贝尔市| 安岳县| 青州市| 改则县| 盘山县| 洛阳市|