欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2024-03-04 20:22:30
以前写聊天程序都是用字符串加个标志就直接发送到服务器,然后转发了。 现在要求我用对象流直接发送对象,测试了一下,记录一下。 其实我更倾向用json发送对象的,json说...

以前写聊天程序都是用字符串加个标志就直接发送到服务器,然后转发了。
现在要求我用对象流直接发送对象,测试了一下,记录一下。
其实我更倾向用json发送对象的,json说白了也是字符串,等有空了好好研究研究。
主要功能:客户端给服务器发送个对象,服务器接收到了打印出来。反过来是差不多了,就不写了。

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

上面是整体架构。
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();
  }
 }
}


运行结果:

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

要注意的地方:
《1》实体类要实现serializable类,添加标识serialversionuid。
《2》发送对象之后要flush();
《3》这个比较重要,搞了我半天不知道哪里出错,言来是这个。
服务器端和客户端两边的实体类要一模一样,类名一样,包名也要一样。我就是因为包名不一样搞了很久。。。。