`
yogreen
  • 浏览: 711 次
  • 性别: Icon_minigender_1
  • 来自: 广州
最近访客 更多访客>>
社区版块
存档分类
最新评论

java Socket编程——对象传输之起始篇<一>

    博客分类:
  • Java
 
阅读更多
    计算机主要功能在于抽象日常生活元素为计算机能识别的数据结构,数据结构的实现过程终将形成了有一定规律的步骤,这种有一定规律的步骤通常叫做算法逻辑或解决问题的逻辑模式。Java中将生活元素封装起来的对象是类,类的实例是将类加载到内存中并分配了内存地址而成为类对象(通称对象实例或实例对象)。类是Java虚拟机中最小的执行单元,是八个基本数据类型组成的集合。网络交互中对象的交互是基础,对象传输尤其彰显其重要性和具备的强大的功能。
    所谓对象的传输就是网络中一个或多个节点进程承载交互信息的是Java定义的任何类,当在某个节点调用该类的方法时,其它进程可以接收到该类执行的结果,从而达到同一进程或不同进程之间交互的目的。
    Java中想要在网络两端传输对象,该对象必须是可序列化的,而一个对象要是可序列化的,必须实现Serializable或Externalizable接口,还使用transien关键字标示对象的字段域的某个特定字段不能序列化,所谓不能序列化就是该字段在对象序列化过程中不在存储或网络传输的流中可见。(关于Java序列化更详细内容,是另一个主题,这里不赘述)
    这一节先从简单的示例开始。
   
    1.可序列化的类
public class User implements Serializable { 
    private static final long serialVersionUID = 1L; 
    private String name; 
    private String password; 
 
    public User() { 
         
    } 
     
    public User(String name, String password) { 
        this.name = name; 
        this.password = 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; 
    } 
}
    这是简单的POJO--User类并让其实现了Serializable接口。
    2.服务器端代码
public class ServerPoint {

public static void main(String[] args) throws Exception{
// TODO Auto-generated method stub
               //开启服务
ServerSocket server = new ServerSocket(8080);
               //构造User对象并调用User对象的setter方法
User user = new User();
user.setName("ServerPoint");
user.setPassword("server@123456");
                //输入流,以读取Client的输入
InputStream ins= null;
                //缓存输入流,将输入流缓存起来以防Client输出流关闭
BufferedInputStream buffins = null;
               //输出流,向连接本服务器的Client输出数据
OutputStream out= null;
               //对象序列化的输出流
ObjectOutputStream objout= null;
               //对象序列化的输入流
ObjectInputStream objins = null;
               //服务器端等待连接的Socket
Socket socket = null;
               //输出提示信息
System.out.println("Server is starting, waiting for accept.");
while(true){
socket = server.accept();
out = socket.getOutputStream();
objout = new ObjectOutputStream(out);
objout.writeObject(user);
ins = socket.getInputStream();
//这里使用Buffer是个技巧,JDK7后,IO流都实现了Closeable接口,只有Buffer了才能拿到已经关闭输出流的Client写入的数据
buffins = new BufferedInputStream(ins);
objins = new ObjectInputStream(buffins);
    user = (User) objins.readObject();
System.out.println(user.getName());
System.out.println(user.getPassword());

}

}

}
   
    3.Client端代码
public class ClientPoint {

public static void main(String[] args) throws Exception{
// TODO Auto-generated method stub
Socket socket = new Socket("192.168.1.109",8080);
User user = new User();
user.setName("Tom");
user.setPassword("12345678");
InputStream ins= null;
BufferedInputStream buffins = null;
OutputStream out= null;
ObjectOutputStream objout= null;
ObjectInputStream objins = null;

out = socket.getOutputStream();
objout = new ObjectOutputStream(out);
objout.writeObject(user);

ins = socket.getInputStream();
buffins = new BufferedInputStream(ins);
objins = new ObjectInputStream(buffins);
user = (User) objins.readObject();
System.out.println(user.getName());
System.out.println(user.getPassword());

}

}
    4.程序运行结果
    a.服务器端输出



    b.client端输出



    5.总结
    对象传输是面向服务两端很重要的一方面,无论是实现了Serializable的POJO还是JSON或者XML都是必须经过序列化后才能在服务两端进行传输和交互。
   Socket编程是面向服务的基础,而Socket编程的基础是服务和服务使用者之间的交互,Java中服务交互的两端的消息载体就是对象,通常是POJO对象。

  • 大小: 18.6 KB
  • 大小: 24.8 KB
分享到:
评论

相关推荐

    安卓Android源码——基于socket通讯的文件续传!.zip

    本项目的核心是利用Socket编程实现文件的断点续传,确保在网络不稳定的情况下,文件传输可以中断后重新连接继续传输,而不会丢失已传输的数据。以下是关于这个主题的详细知识讲解。 首先,我们需要了解Socket的基本...

    java源码包---java 源码 大量 实例

     Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...

    java源码包2

     Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...

    java源码包3

     Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...

    成百上千个Java 源码DEMO 4(1-4是独立压缩包)

    内容索引:JAVA源码,媒体网络,飞鸽传书 Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有...

    java源码包4

     Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...

    成百上千个Java 源码DEMO 3(1-4是独立压缩包)

    内容索引:JAVA源码,媒体网络,飞鸽传书 Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有...

    JAVA上百实例源码以及开源项目源代码

    内容索引:JAVA源码,媒体网络,飞鸽传书 Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有...

    东北大学 计算机网络实验

    【东北大学计算机网络实验】是针对计算机科学与技术专业学生设计的一个实践项目,旨在帮助学生深入理解并掌握Socket编程技术。Socket编程是网络编程的基础,它允许两台计算机通过网络进行通信,是构建网络应用程序的...

    网路编程-UDP-DatagramSocket、DatagramPacket

    本篇将详细探讨UDP编程中的关键组件——`DatagramSocket`和`DatagramPacket`,以及如何利用它们进行数据的发送和接收。 `DatagramSocket`是Java提供的一个类,它代表了UDP通信中的一个端点。通过这个类,我们可以...

    TCP-IP详解卷2:实现

    书中详细介绍了两种主要的编程接口——Socket API和Berkley Packet Filter (BPF) API,这两种接口在Unix和非Unix系统中被广泛用于编写TCP/IP协议。Socket API是网络通信的基础,而BPF则主要用于网络数据包的过滤和...

    2021-2022计算机二级等级考试试题及答案No.10284.docx

    这是Java网络编程中ServerSocket类的一个重要方法,用于实现服务器端等待客户端的连接。 ### 7. PowerPoint演示文稿操作 - **终止演示**:在PowerPoint中,如果希望在演示过程中终止幻灯片的演示,可以随时按下Esc...

Global site tag (gtag.js) - Google Analytics