Socket与Object流

java在Client和Servet端进行自定义对象传输时注意要点

  1. 必须在客户端和服务端各自创建一个被序列化的同的类,类中的字段也必须相同,否则有些字段会访问不到
  2. 必须把这两个类分别放在客户端与服务端具有相同包名的包下面,否则出现ClassNotFoundException异常或者ClassCastException异常
  3. 如图

客户端代码:

package TCP;

import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.Socket;

import Public.Message;

public class client {

public static void main(String[] args ) throws Exception {
Socket socket = new Socket("127.0.0.1",9999);

ObjectOutputStream objOut = new ObjectOutputStream(socket.getOutputStream());

ObjectInputStream objIn = new ObjectInputStream(socket.getInputStream());

// objOut.writeObject("客户端来消息了");

Message message = new Message();
message.setAge(18);

objOut.writeObject(message);

}

}

  

服务端代码:

  

package webTest;

import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.ServerSocket;
import java.net.Socket;

import Public.Message;

public class Server {

public static void main(String[] args) throws Exception {

ServerSocket ssocket = new ServerSocket(9999);

Socket socket = ssocket.accept();

ObjectInputStream objIn = new ObjectInputStream(socket.getInputStream());

ObjectOutputStream objOut = new ObjectOutputStream(socket.getOutputStream());

objOut.writeObject("服务端来消息了");

Message message = new Message();
message = (Message) objIn.readObject();
System.out.println("message+"+message.getAge());

String str = (String)objIn.readObject();

System.out.println("str+"+str);

}

}

消息类:

package Public;

import java.io.Serializable;

public class Message implements Serializable{
/**
*
*/
private static final long serialVersionUID = 8625279621236358825L;
private int age;

public int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}

}

时间: 2024-11-17 06:28:30

Socket与Object流的相关文章

java 大文件上传 断点续传 完整版实例 (Socket、IO流)

原文出自:https://blog.csdn.net/seesun2012 java两台服务器之间,大文件上传(续传),采用了Socket通信机制以及JavaIO流两个技术点,具体思路如下: 实现思路: 1.服:利用ServerSocket搭建服务器,开启相应端口,进行长连接操作 2.服:使用ServerSocket.accept()方法进行阻塞,接收客户端请求 3.服:每接收到一个Socket就建立一个新的线程来处理它 4.客:利用Socket进行远程连接,询问已上传进度 5.客:使用File

socket传送二进制流的一些总结

第一次实质性的接触socket通信方面的工作,所以遇到的问题还真不少,写篇博客记录一下,提升下记忆. 需求是通过私有协议进行二进制数据的传输,必须保证数据包不能被丢失,所以选择tcp的socket进行通信. 1. 遇到的第一个问题是客户端与服务端的socket通信没有保持持续的连接状态 这个是一个想当然的错误.想当然的以为TCP是有连接的通信,但是你如果长时间不通信,服务端一直保持着通信,这对服务器资源是一种极大的浪费.客户端与服务端的连接是需要占用一定资源的,而服务端的资源是有限的.如果一直保

Java IO(七)- Object流

直接将Object写入或写出 transient关键字 serializable接口 externalizable接口 例子一. public class Test { public static void main(String[] args) { try { T t = new T(); t.k = 18; FileOutputStream fos = new FileOutputStream("d:/bak/testobjectio.dat"); ObjectOutputStre

JAVA Socket传输Object(对象)注意的问题

在java中,可以通过socket将一个对象进行传递,通过ObjectOutputStream,ObjectInputStream来进行写入和读取(具体的方法参考http://blog.csdn.net/zyujie/article/details/8243742),但在传递时需要注意以下两点: 1.传递的对象必须实现Serializable标记接口,实现对象的可序列化.如public class Employee implements Serializable 2.发送和接收的对象包名应该保持

Java socket中关闭IO流后,发生什么事?(以关闭输出流为例)

声明:该博文以socket中,关闭输出流为例进行说明. 为了方便讲解,我们把DataOutputstream dout = new DataOutputStream(new BufferedOutputStream(mySocket.getOutputStream()));中的dout做为Socket输出流的代言.同样的,din是输入流的代言. 可以造成dout被关闭的操作有: 1.调用dout.close();或din.close();因为使用这种流关闭,会造成socket被关闭,所以输入输出

多客户登录(基于TCP的流式套接字Socket编程)

1.序列化对象 package com.ljb.app.socket; import java.io.Serializable; /**  * 用户类(实现序列化)  * @author LJB  * @version 2015年3月12日  */ public class User implements Serializable{  private String name;  private String password;    public String getName() {   ret

socket多线程方式案例

记下来,方便以后查看 User类 1 package com.xujingyang.ThreadSocket; 2 3 import java.io.Serializable; 4 5 public class User implements Serializable { 6 private String name; 7 private int age; 8 9 public String getName() { 10 return name; 11 } 12 13 public void se

Flex Socket与Java通信实例说明(转)

Flex Socket与Java通信实例说明(转) 这两天一直在flex的Socket ,现在终于懂了很多.由浅到深一步一步深入.慢慢体会实例,虽然实例都是在网上找的,但也经过了我的测试.我比较喜欢注释,也注释了很多. 跟着走你就会懂.. Flex端 和 Java端, 先运行Java端启动服务.然后在测试Flex. 实例一: Flex端: <?xml version="1.0" encoding="utf-8"?> <mx:TitleWindow

Python基础-第七天-面向对象编程进阶和Socket编程简介

本篇内容: 1.面向对象编程进阶-静态方法 2.面向对象编程进阶-类方法 3.面向对象编程进阶-属性方法 4.面向对象编程进阶-特殊成员(内置方法) 5.面向对象编程进阶-反射 6.异常处理.断言 7.Socket编程简介 一.面向对象编程进阶-静态方法 1.静态方法的实现 通过@staticmethod装饰器可以把其装饰的方法变为一个静态方法: 变成静态方法后,形参中可以不用写self了.如果写了self,默认是不会把对象本身传递给self,需要手动传递: class Dog(object):