Java Socket(二)使用TCP传输对象

在Java Socket使用TCP的基础上,通过ObjectInputStream和ObjectOutputStream来读写对象。


//传输的对象,需要序列化
package socket;
import java.io.Serializable;
public class MsgTO implements Serializable
{
	private static final long serialVersionUID = 1L;
	private String msg;	
	private int status;
	private String response;

	public String getMsg() {
		return msg;
	}
	public void setMsg(String msg) {
		this.msg = msg;
	}
	public int getStatus() {
		return status;
	}
	public void setStatus(int status) {
		this.status = status;
	}
	public String getResponse() {
		return response;
	}
	public void setResponse(String response) {
		this.response = response;
	}
}

//客户端
public class SocketClient
{
	private final Logger logger = LoggerFactory.getLogger(getClass());	
	
	public static void main(String args[]) throws Exception
	{		
		Socket socket = new Socket("192.168.100.236", 2221);
		System.out.println("socket created");

		//send request
		OutputStream os = socket.getOutputStream();
		ObjectOutputStream oos = new ObjectOutputStream(os);
		System.out.println("send hello");
		MsgTO obj = new MsgTO();
		obj.setMsg("Hello");
		oos.writeObject(obj);;
		oos.flush();
		socket.shutdownOutput();

		//receive response
		InputStream is = socket.getInputStream();
		ObjectInputStream ois = new ObjectInputStream(is);
		obj = (MsgTO) ois.readObject();	
		System.out.println("Received:"+obj);
		if(obj != null)
		{
			System.out.println("status="+obj.getStatus());
			System.out.println("response="+obj.getResponse());
		}
		socket.shutdownInput();
		
		//close resource
		oos.close();
		os.close();
		socket.close();
	}
}

//服务端
public class SocketServer
{
    public static void main(String args[]) throws Exception
    {    	
            ServerSocket serverSocket = new ServerSocket(2221);
            System.out.println("server socket created");
            //for multiple clients
            while (true) //循环监听,等待客户端的连接
	    {
			System.out.println("***");
			Socket socket = serverSocket.accept();
			ServerHandler serverHandler = new ServerHandler(socket);
			serverHandler.setPriority(4);//设置线程的优先级来保证运行速度, 范围为[1,10], 默认为5.
			serverHandler.start();					
	    }
    }
}

class ServerHandler extends Thread
{
	private final Logger logger = LoggerFactory.getLogger(getClass());
	
	//与本线程相关的Socket
	private Socket socket = null;	
	public ServerHandler(Socket socket)
	{
		this.socket = socket;
	}
	
	//线程执行的操作
	//for object
	public void run()
	{
		InputStream is = null;
		ObjectInputStream ois = null;

		OutputStream os = null;
	    ObjectOutputStream oos = null;
		try 
		{
			//receives request
			is = socket.getInputStream();
			ois = new ObjectInputStream(is);
			MsgTO obj = (MsgTO) ois.readObject();
			logger.debug("received:" + obj);
			if(obj!=null)
			{
				logger.debug("status=" + obj.getStatus());
				logger.debug("msg=" + obj.getMsg());
			}
			socket.shutdownInput();

			//deal is still to do
			//send response
			os = socket.getOutputStream();
			oos = new ObjectOutputStream(os);
			logger.debug("send response");
			if(obj != null)
			{
				obj.setStatus(0);
				obj.setResponse("123");
				oos.writeObject(obj);
			}
			oos.flush();
			socket.shutdownOutput();
		} catch (Exception ex) 
		{
			logger.error(ex.getMessage());
			ex.printStackTrace(System.out);
		} finally 
		{			
			try //close resource
			{
				oos.close();
				ois.close();
				is.close();
				socket.close();
			} catch (Exception ex) 
			{
				ex.printStackTrace(System.out);
			}
		}
	}		
}	

转载于:https://my.oschina.net/liuyuanyuangogo/blog/812082

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值