UserInfo.java

package com.company.s6;

import java.io.Serializable;

public class UserInfo implements Serializable {
private long id;
private String username;
private String password; public UserInfo() {
} public UserInfo(long id, String username, String password) {
this.id = id;
this.username = username;
this.password = password;
} public long getId() {
return id;
} public void setId(long id) {
this.id = id;
} public String getUsername() {
return username;
} public void setUsername(String username) {
this.username = username;
} public String getPassword() {
return password;
} public void setPassword(String password) {
this.password = password;
}
}

Server.java

package com.company.s6;

import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket; public class Server {
public static void main(String[] args) throws Exception{
ServerSocket serverSocket=new ServerSocket(8888);
Socket socket=serverSocket.accept();
InputStream inputStream=socket.getInputStream();
OutputStream outputStream=socket.getOutputStream();
ObjectOutputStream objectOutputStream=new ObjectOutputStream(outputStream);
ObjectInputStream objectInputStream=new ObjectInputStream(inputStream); for(int i=0;i<5;i++){
UserInfo userInfo=(UserInfo) objectInputStream.readObject();
System.out.println("在服务端打印 "+(i+1)+":"+userInfo.getId()+" "+userInfo.getUsername()+" "+userInfo.getPassword());
UserInfo newUserInfo=new UserInfo();
newUserInfo.setId(i+1);
newUserInfo.setUsername("servername"+(i+1));
newUserInfo.setPassword("serverpassord"+(i+1));
objectOutputStream.writeObject(newUserInfo);
}
objectOutputStream.close();
objectInputStream.close(); outputStream.close();
inputStream.close(); socket.close();
serverSocket.close();
}
}

Client.java

package com.company.s6;

import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.net.Socket; public class Client {
public static void main(String[] args) throws Exception{
Socket socket=new Socket("localhost",8888);
InputStream inputStream=socket.getInputStream();
OutputStream outputStream=socket.getOutputStream();
ObjectInputStream objectInputStream=new ObjectInputStream(inputStream);
ObjectOutputStream objectOutputStream=new ObjectOutputStream(outputStream);
for(int i=0;i<5;i++){
UserInfo newUserinfo=new UserInfo();
newUserinfo.setId(i+1);
newUserinfo.setUsername("clientUserName:"+(i+1));
newUserinfo.setPassword("clientPassword:"+(i+1)); objectOutputStream.writeObject(newUserinfo); UserInfo userInfo=(UserInfo)objectInputStream.readObject();
System.out.println("在客户端打印:"+(i+1)+":"+userInfo.getId()+" "+userInfo.getUsername()+" "+userInfo.getPassword());
}
objectInputStream.close();
objectOutputStream.close(); outputStream.close();
inputStream.close(); socket.close();
}
}

ps:如果服务端先获取objectInputStream对象,然后获取objectOutPutStream对象;

如果客户端也是同样的顺序获取对象,这样的话在运行时会在服务端的程序代码:

ObjectInputStream objectInputStream=new ObjectInputStream(inputStream);

出现阻塞的现象。

正确的写法应该是:

1:服务端先获得ObjectInputStream对象,客户端就要先获得ObjectOutPutStream对象;

2:服务端先获得ObjectOutPutStream对象,客户端就要先获得ObjectInPutStream对象;

socket互传对象以及IO流的顺序问题的更多相关文章

  1. Java(33)IO流的介绍&字节流

    作者:季沐测试笔记 原文地址:https://www.cnblogs.com/testero/p/15228446.html 博客主页:https://www.cnblogs.com/testero ...

  2. Java IO流

    File类 ·java.io.File类:文件和目录路径名的抽象表示形式,与平台无关 ·File能新建.删除.重命名文件和目录,但File不能访问文件内容本身.如果需要访问文件内容本身,则需要使用输入 ...

  3. IO流(二)I/O

    一.IO流概述 1.定义:Java的IO流是实现输入输出的基础,它可以方便地实现数据的输入/输出操作. 2.流的分类: (1)按流向来分:输入流和输出流 (2)按操作的数据来分:字节流和字符流 (3) ...

  4. Python 完美诠释"高内聚"概念的 IO 流 API 体系结构

    1. 前言 第一次接触 Python 语言的 IO API 时,是惊艳的.相比较其它语言所提供的 IO 流 API . 无论是站在使用者的角度还是站在底层设计者的角度,都可以称得上无与伦比. 很多人在 ...

  5. Java基础-IO流对象之File类

    Java基础-IO流对象之File类 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.IO技术概述 回想之前写过的程序,数据都是在内存中,一旦程序运行结束,这些数据都没有了,等下 ...

  6. 二十、Java基础--------IO流之其他对象

    在上面两篇文章中介绍了IO体系并详细介绍了字节流以及字符流,本文主要是讲述操作文件的File.转化流.标准输入与输出.Properties.打印流以及序列流. File File英文为"文件 ...

  7. IO流(一)__File对象和字符流FileWriter FileReader

    IO流:IO流用来处理设备之间的数据传输,Java对于流的操作对象都在IO包中将外设中的数据读取到内存中:输入将内存的数写入到外设中:输出 流分为字节流和字符流字符流的由来:其实就是字节流读取文字字节 ...

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

    声明:该博文以socket中,关闭输出流为例进行说明. 为了方便讲解,我们把DataOutputstream dout = new DataOutputStream(new BufferedOutpu ...

  9. Java IO(Properties/对象序列化/打印流/commons-io)

    Java IO(Properties/对象序列化/打印流/commons-io) Properties Properties 类表示了一个持久的属性集.Properties 可保存在流中或从流中加载. ...

随机推荐

  1. 一招教你如何修复MySQL slave中继日志损坏问题

    [摘要]MySQL的Crash safe slave是指slave crash后,把slave重新拉起来可以继续从Master进行复制,不会出现复制错误也不会出现数据不一致. PS:华为云数据库特惠专 ...

  2. 开放下载 | 《Knative 云原生应用开发指南》开启云原生时代 Serverless 之门

    点击下载<Knative 云原生应用开发指南> 自 2018 年 Knative 项目开源后,就得到了广大开发者的密切关注.Knative 在 Kubernetes 之上提供了一套完整的应 ...

  3. 大数据之Linux基础

    回顾这一个多月以来闭关学大数据的一些相关重要知识,就当复习,顺便以备以后查看 Linux学习第一步自然是安装Linux. 关于Linux 首先介绍下Linux,Linux系统很多程序员开发者其实都耳熟 ...

  4. 在 Xcode9 中自定义文件头部注释和其他文本宏

    在 Xcode9 中自定义文件头部注释和其他文本宏 . 参考链接 注意生成的plist文件的名称为IDETemplateMacros.plist 在plist文件里设置自己想要的模板 注意plist存 ...

  5. 使用 webservice 实现 RPC 调用

    WebService 介绍 Web service 是一个平台独立的,低耦合的 web 的应用程序用于开发分布式的互操作的应用程序.Web Service 技术, 能使得运行在不同机器上的不同应用无须 ...

  6. 强化学习三:Dynamic Programming

    1,Introduction 1.1 What is Dynamic Programming? Dynamic:某个问题是由序列化状态组成,状态step-by-step的改变,从而可以step-by- ...

  7. 第一节:Shiro HelloWorld 实现

    1.新建maven工程,pom配置maven jar包 <dependency> <groupId>org.apache.shiro</groupId> <a ...

  8. Centos7.2 下DNS+NamedManager高可用部署方案完整记录

    Centos7.2 下DNS+NamedManager高可用部署方案完整记录 之前说到了NamedManager单机版的配置,下面说下DNS+NamedManager双机高可用的配置方案: 1)机器环 ...

  9. 基于 Blazui 的 Blazor 后台管理模板 BlazAdmin 正式尝鲜

    简介 BlazAdmin 是一个基于Blazui的后台管理模板,无JS,无TS,非 Silverlight,非 WebForm,一个标签即可使用. 我将在下一篇文章讨论 Blazor 服务器端渲染与客 ...

  10. c语言输入矩阵的对角线之和

    一.程序代码如下 #include<stdio.h> #define M 4 main() { int matrix[][M]={ {1,2,4,5},{2,6,6,7},{8,7,6,5 ...