• 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异常:	" + 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("用户写线程构造器异常:	"+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("写:		"+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("用户端写入线程出现异常:	"+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("服务器端服务开启失败:	"+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("服务器写线程构造器异常:	"+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("服务器端写入线程出现异常:	"+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("服务器读线程构造器异常:	"+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("服务器端读取线程异常:	" + e.getMessage());
    		}
    
    	}
    }
    

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

  • 相关阅读:
    (三)字符串、列表、元组、字典
    (二)判断语句和循环语句
    (一)python基础知识
    Python之禅
    《Vue.js实战》一书 p117 练习 1& 2 (2019.12.19)
    React练习 17:02_11_鼠标移过修改图片路径
    React练习 16:02_10_提示框效果
    React练习 15:02_09_单一按钮显示隐藏
    React练习 14:02_08_简易js年历
    React练习 13:02_07_简易选项卡
  • 原文地址:https://www.cnblogs.com/zhanchaohan/p/9488654.html
Copyright © 2020-2023  润新知