用到Socket序列化对象网络传输时ObjectOutputStream一直刷新连接

用户代码

package com.jachs.ladflower.ladflower;

import java.net.Socket;

import org.apache.log4j.Logger;

import com.jachs.ladflower.ladflower.thread.UserReaderThread;
import com.jachs.ladflower.ladflower.thread.UserWriterThread; public class UserSocket {
private static Logger logger = Logger.getLogger(UserSocket.class); static{
try {
Socket socket = new Socket(Constant.serverConfigure.getServerIp(), Constant.serverConfigure.getServerPort());
new Thread(new UserReaderThread(socket.getInputStream())).start();
new Thread(new UserWriterThread(socket.getOutputStream())).start();
// MainFrame MainFrame=new MainFrame(socket.getInetAddress().getHostName());
} catch (Exception e) {
logger.error("客户端Socket异常:\t" + e.getMessage());
e.printStackTrace();
}
}
}

  用户写入线程代码

package com.jachs.ladflower.ladflower.thread;

import java.io.DataOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.util.Scanner; import org.apache.log4j.Logger; import com.google.gson.Gson;
import com.jachs.ladflower.ladflower.Constant;
import com.jachs.ladflower.ladflower.entity.SendInfo; /****
* 用户Socket写
* @author zhanchaohan
*
*/
public class UserWriterThread implements Runnable{
private Logger logger= Logger.getLogger(UserWriterThread.class);
// private ObjectOutputStream objectOutputStream;
private DataOutputStream dataOutputStream;
private Gson gson=new Gson(); public UserWriterThread(OutputStream outputStream) {
super();
try {
// this.objectOutputStream =new ObjectOutputStream(outputStream);
this.dataOutputStream=new DataOutputStream(outputStream);
} catch (Exception e) {
logger.error("用户写线程构造器异常:\t"+e.getMessage());
}
} public void run() {
try {
Scanner scanner=new Scanner(System.in);
String info;
SendInfo sendInfo;
// while((info=scanner.nextLine())!=null) {
// sendInfo=new SendInfo(Constant.STATECODE_2,info);
// objectOutputStream.writeObject(sendInfo);
// }
while((info=scanner.nextLine())!=null) {
System.out.println("写:\t\t"+info);
sendInfo=new SendInfo(Constant.STATECODE_2,info);
System.out.println("a");
dataOutputStream.writeUTF(gson.toJson(sendInfo));
System.out.println("b");
}
} catch (Exception e) {
logger.error("用户端写入线程出现异常:\t"+e.getMessage());
}
} }

  服务器代码

package com.jachs.ladflower.ladflower;

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket; import org.apache.log4j.Logger; import com.jachs.ladflower.ladflower.entity.SendInfo;
import com.jachs.ladflower.ladflower.quartz.QuartzInit;
import com.jachs.ladflower.ladflower.thread.ServerReaderThread;
import com.jachs.ladflower.ladflower.thread.ServerWriterThread;
import com.jachs.ladflower.ladflower.utill.SocketUtill; /****
* 服务器Socket
* @author zhanchaohan
*
*/
public class ServerSockets {
private static Logger logger= Logger.getLogger(ServerSockets.class);
static {
try {
//初始化定时器
// QuartzInit quartzInit=new QuartzInit();
//启动在线用户刷新定时器
// quartzInit.MonitoringOnLine_Heartbeat(); ServerSocket serverSocket=new ServerSocket(Constant.SERVERPORT);
Socket socket;
while((socket=serverSocket.accept())!=null) {
// Constant.list.add(socket);
new Thread(new ServerReaderThread(socket.getInputStream())).start();
new Thread(new ServerWriterThread(socket.getOutputStream())).start();
// SocketUtill.sendMsgToAllSocket(new SendInfo(Constant.STATECODE_0, socket.getInetAddress().getHostName()));
System.out.println("getIn");
}
} catch (IOException e) {
logger.error("服务器端服务开启失败:\t"+e.getMessage());
e.printStackTrace();
}
}
}

  服务器

写入代码

package com.jachs.ladflower.ladflower.thread;

import java.io.DataOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.util.Scanner; import org.apache.log4j.Logger; import com.google.gson.Gson;
import com.jachs.ladflower.ladflower.Constant;
import com.jachs.ladflower.ladflower.entity.SendInfo; /****
* 服务器Socket写
* @author zhanchaohan
*
*/
public class ServerWriterThread implements Runnable{
private Logger logger= Logger.getLogger(ServerWriterThread.class);
// private ObjectOutputStream objectOutputStream;
private DataOutputStream dataOutputStream;
private Gson gson=new Gson(); public ServerWriterThread(OutputStream outputStream) {
super();
try {
this.dataOutputStream=new DataOutputStream(outputStream);
// this.objectOutputStream =new ObjectOutputStream(outputStream);
} catch (Exception e) {
logger.error("服务器写线程构造器异常:\t"+e.getMessage());
}
} public void run() {
try {
Scanner scanner=new Scanner(System.in);
String info;
SendInfo sendInfo;
// while((info=scanner.nextLine())!=null) {
// sendInfo=new SendInfo(Constant.STATECODE_2,info);
// objectOutputStream.writeObject(sendInfo);
// }
while((info=scanner.nextLine())!=null) {
sendInfo=new SendInfo(Constant.STATECODE_2,info);
dataOutputStream.writeUTF(gson.toJson(sendInfo));
}
} catch (Exception e) {
logger.error("服务器端写入线程出现异常:\t"+e.getMessage());
}
} }

  服务器读取代码

package com.jachs.ladflower.ladflower.thread;

import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectInputStream; import org.apache.log4j.Logger; import com.jachs.ladflower.ladflower.entity.SendInfo;
import com.jachs.ladflower.ladflower.utill.SocketUtill; /****
* 服务器Socket读
*
* @author zhanchaohan
*
*/
public class ServerReaderThread implements Runnable {
private Logger logger = Logger.getLogger(ServerReaderThread.class);
// private ObjectInputStream inputStream;
private DataInputStream dataInputStream; public ServerReaderThread(InputStream inputStream) {
super();
this.dataInputStream=new DataInputStream(inputStream);
/*try {
this.inputStream = new ObjectInputStream(inputStream);
} catch (IOException e) {
logger.error("服务器读线程构造器异常:\t"+e.getMessage());
}*/
} public void run() {
try {
/*SendInfo send;
while ((send = (SendInfo) inputStream.readObject()) != null) {
SocketUtill.SwithInfo(send);
}*/
while(true) {
System.out.println(dataInputStream.readUTF());
}
} catch (Exception e) {
logger.error("服务器端读取线程异常:\t" + e.getMessage());
} }
}

  再新起一个项目也使用ObjectInputStream序列化对象传输时正常未找到原因,改用传输json使用Gson

Socket和ObjectOutputStream问题的更多相关文章

  1. Java Socket编程题库

    一.    填空题 ___ IP地址____用来标志网络中的一个通信实体的地址.通信实体可以是计算机,路由器等. 统一资源定位符URL是指向互联网"资源"的指针,由4部分组成:协议 ...

  2. Java从零开始学四十五(Socket编程基础)

    一.网络编程中两个主要的问题 一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后如何可靠高效的进行数据传输. 在TCP/IP协议中IP层主要负责网络主机的定位,数据传输的路由,由IP地址可 ...

  3. 基于Tcp协议的简单Socket通信实例(JAVA)

    好久没写博客了,前段时间忙于做项目,耽误了些时间,今天开始继续写起~ 今天来讲下关于Socket通信的简单应用,关于什么是Socket以及一些网络编程的基础,这里就不提了,只记录最简单易懂实用的东西. ...

  4. java socket之传输实体类对象

    一.TCP编程     TCP协议是面向连接的.可靠地.有序的,以字节流的方式发送数据.java实现TCP通信依靠2个类:客户端的Socket类和服务器端的ServerSocket类. 基于TCP通信 ...

  5. 流式套接字:基于TCP协议的Socket网络编程(案例3)

    案例:在案例1的基础上将传输的字符串换成具体的对象. 客户端代码: package com.yh.SocketObject; import java.io.IOException; import ja ...

  6. java:网络编程(InetAddress,InetSocketAddress,URL,TCP(Socket与SeverSocket),TCP与UDP的区别)

    InerAddress: /**IP地址:在网络上唯一标示一台计算机 * 端口号:标示计算机上不同的应用程序 * java.net.InetAddress类:此类表示互联网协议 (IP) 地址. * ...

  7. Java Socket实战之三 传输对象

    首先需要一个普通的对象类,由于需要序列化这个对象以便在网络上传输,所以实现java.io.Serializable接口就是必不可少的了,入下: public class User implements ...

  8. Java Socket实战之五:使用加密协议传输对象

    转自:http://developer.51cto.com/art/201202/317547.htm 前面几篇博文提到了Socket中一些常用的用法,但是对于一些有安全要求的应用就需要加密传输的数据 ...

  9. Java Socket实战之三:传输对象

    转自:https://i.cnblogs.com/EditPosts.aspx?opt=1 前面两篇文章介绍了怎样建立Java Socket通信,这一篇说一下怎样使用Java Socket来传输对象. ...

随机推荐

  1. WPF自定义控件(三)の扩展控件

    扩展控件,顾名思义就是对已有的控件进行扩展,一般继承于已有的原生控件,不排除继承于自定义的控件,不过这样做意义不大,因为既然都自定义了,为什么不一步到位呢,有些不同的需求也可以通过此来完成,不过类似于 ...

  2. googLeNet网络

    1.什么是inception结构 2.什么是Hebbian原理 3.什么是多尺度处理 最近深度学习的发展,大多来源于新的想法,算法以及网络结构的改善,而不是依赖于硬件,新的数据集,更深的网络,并且深度 ...

  3. 数据库 schema含义

    数据库Schema有两种含义,一种是概念上的Schema,指的是一组DDL语句集,该语句集完整地描述了数据库的结构.还有一种是物理上的Schema,指的是数据库中的一个名字空间,它包含一组表.视图和存 ...

  4. 接入天猫精灵auth2授权页面https发送ajax请求

    已存在一个应用A,采用的是http交互, 在接入天猫精灵时,要求请求类型是https,所以在应用服务前加了个nginx转发https请求.在绑定授权页面,会发送ajax请求验证用户名和密码,采用htt ...

  5. 安装NVIDIA

    安装NVIDIA显卡驱动 $ ubuntu-drivers devices; $ sudo apt install nvidia-340 (安装指定版本) 重启系统: $ nvidia-smi (查看 ...

  6. python __call__方法的使用

    介绍一下python __call__ 方法的使用 代码如下: #!/usr/bin/env python # -*- coding: utf- -*- ''' __call__方法 普通的类定义的方 ...

  7. ESP8266开发综合篇第十四节(LUA)-8266作为TCP服务器,Android客户端连接,显示温湿度,控制继电器

    前几节先略过,我先补充上大部分人迫切的需求 编写Android TCP客户端  用Android Studio 先做一下界面 然后放一个输入对话框,因为没有显示出来这个控件.所以就手写 剩下的自己研究 ...

  8. 关于 js tofixed()保留小数位数问题

    保留位数必须是数字 const num = parseFloat ('123456.33').tofixed(2); !!!! 注意 现在的的 num 是 字符串类型, 如果给它加数字的话,就会报错 ...

  9. 设计模式(5)原型模式(Prototype)

    设计模式(0)简单工厂模式 设计模式(1)单例模式(Singleton) 设计模式(2)工厂方法模式(Factory Method) 设计模式(3)抽象工厂模式(Abstract Factory) 设 ...

  10. 深入浅出Tomcat/1- 来历和配置文件

    背景 Tomcat是一个非常重要的Web Server,已经存在多年.尤其是最近几年,因为Spring MVC或是Spring Boot的盛行,Tomcat的地位越发重要,地位明显升级.   我相信很 ...