Java中使用Socket发送Java对象实例

所属分类: 软件编程 / java 阅读数: 49
收藏 0 赞 0 分享

以前写聊天程序都是用字符串加个标志就直接发送到服务器,然后转发了。
现在要求我用对象流直接发送对象,测试了一下,记录一下。
其实我更倾向用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》这个比较重要,搞了我半天不知道哪里出错,言来是这个。
服务器端和客户端两边的实体类要一模一样,类名一样,包名也要一样。我就是因为包名不一样搞了很久。。。。

更多精彩内容其他人还在看

利用MultipartFile实现文件上传功能

这篇文章主要为大家详细介绍了利用MultipartFile实现文件上传功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Java编程实现NBA赛事接口调用实例代码

这篇文章主要介绍了Java编程实现NBA赛事接口调用实例代码,具有一定参考价值,需要的朋友可以了解下。
收藏 0 赞 0 分享

Java编程之双重循环打印图形

这篇文章主要介绍了Java编程之双重循环打印图形,属于Java编程基础练习部分,具有一定参考价值,需要的朋友可以了解下。
收藏 0 赞 0 分享

java基础学习JVM中GC的算法

这篇文章主要介绍了java基础学习JVM中GC的算法,通过图文加深对GC算法思路的理解。
收藏 0 赞 0 分享

Java编程Post数据请求和接收代码详解

这篇文章主要介绍了Java编程Post数据请求和接收代码详解,涉及enctype的三种编码,post与get等相关内容,具有一定参考价值,需要的朋友可以了解下。
收藏 0 赞 0 分享

Retrofit+Rxjava实现文件上传和下载功能

这篇文章主要介绍了Retrofit+Rxjava实现文件上传和下载功能,文中提到了单文件上传和多文件上传及相关参数的请求,需要的朋友参考下吧
收藏 0 赞 0 分享

Retrofit+Rxjava下载文件进度的实现

这篇文章主要介绍了Retrofit+Rxjava下载文件进度的实现,非常不错,具有参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

java检查服务器的连通两种方法代码分享

这篇文章主要介绍了java检查服务器的连通两种方法代码分享,涉及ping的介绍以及检查服务器连通的两种方法代码示例,具有一定参考价值,需要的朋友可以了解下。
收藏 0 赞 0 分享

Java/Android 获取网络重定向文件的真实URL的示例代码

本篇文章主要介绍了Java/Android 获取网络重定向文件的真实URL的示例代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

java并发编程之同步器代码示例

这篇文章主要介绍了java并发编程之同步器代码示例,分享了相关代码,具有一定参考价值,需要的朋友可以了解下。
收藏 0 赞 0 分享
查看更多