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来传输对象. ...
随机推荐
- Matplotlib 绘图 用法
Matplotlib基础知识 一.Matplotlib基础知识 Matplotlib中的基本图表包括的元素 x轴和y轴 axis 水平和垂直的轴线 x轴和y轴刻度 tick 刻度标示坐标轴的分隔,包括 ...
- centos7下安装docker(15.3跨主机网络-macvlan)
除了ovrlay,docker还开发了另一个支持跨主机容器的driver:macvlan macvlan本身是linu kernel模块,其功能是允许在同一物理网卡上配置多了MAC地址,即:多个int ...
- UVA1374-Power Calculus(迭代加深搜索)
Problem UVA1374-Power Calculus Accept:323 Submit:2083 Time Limit: 3000 mSec Problem Description I ...
- CSAPP:第六章 存储器层次结构
存储器层次结构 关键点:内存 6.1 随机访问存储器6.2 局部性6.3 存储器层次结构 6.1 随机访问存储器 随机访问存储器(Random-Access Memory,RAM)分为两类:静态的 ...
- tar只解压tar包中某个文件
如果tar包很大,而只想解压出其中某个文件.方法如下: 只想解压出Redis-1.972.tar 中的Changes文件,来查看有哪些更改. [root@uplooking]# tar -tf Re ...
- 缓存表 内存表(将表keep到内存)
缓存表 内存表(将表keep到内存) 一.引言: 有时候一些基础表需要非常的频繁访问,尤其是在一些循环中,对该表中的访问速度将变的非常重要.为了提高系统的处理性能,可以考虑将一些表及索引读取并 ...
- IndentationError 这个错误是缩进的问题
1.自定义库导入时,提示这个错误,是缩进的问题
- AT987 高橋君
AT987 高橋君 给出 \(n,\ k\) ,求 \(\displaystyle\sum_{i=0}^kC_n^k\) , \(T\) 次询问 \(T\leq10^5,\ 0\leq k\leq n ...
- 获得数值型数组的所有元素之和(分别使用增强for循环和普通for循环)
package com.Summer_0419.cn; /** * @author Summer * 获得数值型数组的所有元素之和 */public class Test_Method13 { pub ...
- BZOJ1063 NOI2008 道路设计 树形DP
题目传送门: BZOJ 题意精简版:给出一棵树,在一种方案中可以将树的若干链上的所有边的边权改为$0$,但需要保证任意两条链之间没有交点.问最少的一种方案,使得从根节点到其他节点经过的边的边权和的最大 ...