用到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. 解决y7000笔记本ubuntu18.04下 休眠挂起后唤醒花屏

    定位问题,切换到核显后发现一点问题也没有,基本确定是显卡驱动的问题 但是由于配置环境比较复杂,不想重新装N卡驱动,所以另寻方法 sudo gedit /etc/default/grub 修改前 # I ...

  2. Springboot 实现api校验和登录验证

    https://blog.csdn.net/qq_36085004/article/details/83348144 文章目录 API校验 场景 实现思路 代码 拦截器: 拦截器注册: 登录token ...

  3. P1638 逛画展(直尺法)

    这道题是直尺法的模板题: #include<iostream> using namespace std; ; ; int n, m, a[maxn], vis[M]; int main() ...

  4. 【vue】vue +element 搭建项目,加(解)密

    1.安装依赖 cnpm(npm) install --save js-base64 2.应用 import { Base64 } from 'js-base64'; //加密 getEncode(){ ...

  5. 【js】使用javascript 实现静态网页分页效果

    <!DOCTYPE html> <html> <head> <meta http-equiv="content-Type" content ...

  6. Spring配置文件中条件判断标签

    <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.Prop ...

  7. 机器学习三剑客之Pandas中DataFrame基本操作

    Pandas 是基于Numpy 的一种工具,是为了解决数据分析任务而创建的.Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具.Pandas提供了大量能使我们快速便捷 ...

  8. Python+Pycharm—学习1—封装&导入

    一.封装 目的: 写了一个复杂功能的实现,下次有相同的需求时可以直接导入这个包来使用.就可以达到复用的目的了.通俗的来讲就是打包.(以下用四则运算举例) 方案: 1.1.新建python工程,新建一个 ...

  9. 环境部署(八):jenkins配置邮件通知

    完成基于jenkins的持续集成部署后,任务构建执行完成,测试结果需要通知到相关人员.这篇博客,介绍如何在jenkins中配置邮件通知的方法... 一.安装邮件插件 由于Jenkins自带的邮件功能比 ...

  10. mongodb .explain('executionStats') 查询性能分析(转)

    mongodb性能分析方法:explain() 为了演示的效果,我们先来创建一个有200万个文档的记录.(我自己的电脑耗了15分钟左右插入完成.如果你想插更多的文档也没问题,只要有耐心等就可以了.) ...