Socket和ObjectOutputStream问题
用到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问题的更多相关文章
- Java Socket编程题库
一. 填空题 ___ IP地址____用来标志网络中的一个通信实体的地址.通信实体可以是计算机,路由器等. 统一资源定位符URL是指向互联网"资源"的指针,由4部分组成:协议 ...
- Java从零开始学四十五(Socket编程基础)
一.网络编程中两个主要的问题 一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后如何可靠高效的进行数据传输. 在TCP/IP协议中IP层主要负责网络主机的定位,数据传输的路由,由IP地址可 ...
- 基于Tcp协议的简单Socket通信实例(JAVA)
好久没写博客了,前段时间忙于做项目,耽误了些时间,今天开始继续写起~ 今天来讲下关于Socket通信的简单应用,关于什么是Socket以及一些网络编程的基础,这里就不提了,只记录最简单易懂实用的东西. ...
- java socket之传输实体类对象
一.TCP编程 TCP协议是面向连接的.可靠地.有序的,以字节流的方式发送数据.java实现TCP通信依靠2个类:客户端的Socket类和服务器端的ServerSocket类. 基于TCP通信 ...
- 流式套接字:基于TCP协议的Socket网络编程(案例3)
案例:在案例1的基础上将传输的字符串换成具体的对象. 客户端代码: package com.yh.SocketObject; import java.io.IOException; import ja ...
- java:网络编程(InetAddress,InetSocketAddress,URL,TCP(Socket与SeverSocket),TCP与UDP的区别)
InerAddress: /**IP地址:在网络上唯一标示一台计算机 * 端口号:标示计算机上不同的应用程序 * java.net.InetAddress类:此类表示互联网协议 (IP) 地址. * ...
- Java Socket实战之三 传输对象
首先需要一个普通的对象类,由于需要序列化这个对象以便在网络上传输,所以实现java.io.Serializable接口就是必不可少的了,入下: public class User implements ...
- Java Socket实战之五:使用加密协议传输对象
转自:http://developer.51cto.com/art/201202/317547.htm 前面几篇博文提到了Socket中一些常用的用法,但是对于一些有安全要求的应用就需要加密传输的数据 ...
- Java Socket实战之三:传输对象
转自:https://i.cnblogs.com/EditPosts.aspx?opt=1 前面两篇文章介绍了怎样建立Java Socket通信,这一篇说一下怎样使用Java Socket来传输对象. ...
随机推荐
- 解决y7000笔记本ubuntu18.04下 休眠挂起后唤醒花屏
定位问题,切换到核显后发现一点问题也没有,基本确定是显卡驱动的问题 但是由于配置环境比较复杂,不想重新装N卡驱动,所以另寻方法 sudo gedit /etc/default/grub 修改前 # I ...
- Springboot 实现api校验和登录验证
https://blog.csdn.net/qq_36085004/article/details/83348144 文章目录 API校验 场景 实现思路 代码 拦截器: 拦截器注册: 登录token ...
- P1638 逛画展(直尺法)
这道题是直尺法的模板题: #include<iostream> using namespace std; ; ; int n, m, a[maxn], vis[M]; int main() ...
- 【vue】vue +element 搭建项目,加(解)密
1.安装依赖 cnpm(npm) install --save js-base64 2.应用 import { Base64 } from 'js-base64'; //加密 getEncode(){ ...
- 【js】使用javascript 实现静态网页分页效果
<!DOCTYPE html> <html> <head> <meta http-equiv="content-Type" content ...
- Spring配置文件中条件判断标签
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.Prop ...
- 机器学习三剑客之Pandas中DataFrame基本操作
Pandas 是基于Numpy 的一种工具,是为了解决数据分析任务而创建的.Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具.Pandas提供了大量能使我们快速便捷 ...
- Python+Pycharm—学习1—封装&导入
一.封装 目的: 写了一个复杂功能的实现,下次有相同的需求时可以直接导入这个包来使用.就可以达到复用的目的了.通俗的来讲就是打包.(以下用四则运算举例) 方案: 1.1.新建python工程,新建一个 ...
- 环境部署(八):jenkins配置邮件通知
完成基于jenkins的持续集成部署后,任务构建执行完成,测试结果需要通知到相关人员.这篇博客,介绍如何在jenkins中配置邮件通知的方法... 一.安装邮件插件 由于Jenkins自带的邮件功能比 ...
- mongodb .explain('executionStats') 查询性能分析(转)
mongodb性能分析方法:explain() 为了演示的效果,我们先来创建一个有200万个文档的记录.(我自己的电脑耗了15分钟左右插入完成.如果你想插更多的文档也没问题,只要有耐心等就可以了.) ...