Java socket(三)使用TCP传输文件


public class SocketClient
{
	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();
		DataOutputStream oos = new DataOutputStream(os);

                //协议的数据类型
		oos.write("1".getBytes());//在发送正式数据之前,先发送这个协议的数据类型标记,相当于一个头
		oos.flush();

                //将f:\leave.jpg发送给服务端
		BufferedInputStream fis = new BufferedInputStream(new FileInputStream("f:\\leave.jpg"));
                byte[] buf = new byte[1024];
                int length;
		while((length = fis.read(buf, 0, buf.length))!=-1)
		{
		     oos.write(buf, 0, length);
		     oos.flush();
		}
		socket.shutdownOutput();

		//receive response
		InputStream is = socket.getInputStream();
		ObjectInputStream ois = new ObjectInputStream(is);
		MsgTO 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();
		fis.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 file
	public void run()
	{
		InputStream is = null;
		DataInputStream ois = null;
		BufferedOutputStream bos = null;

		OutputStream os = null;
	        ObjectOutputStream oos = null;
		try 
		{
			//receives request
			is = socket.getInputStream();
			ois = new DataInputStream(is);
		
                        //协议的数据类型
			byte[] flag = new byte[1];
			int len = ois.read(flag);//在接收正式数据之前,先接收协议的数据类型,这个头信息。
			logger.info("length="+len);
			String flags = new String(flag);
			logger.info("flag=" + flags);

			//接收文件到e:\lyy.jpg
			File file = new File("e:\\lyy2.jpg");
			file.createNewFile();
			bos = new BufferedOutputStream(new FileOutputStream(file));
			byte[] buf = new byte[1024];
			int length;
			while((length = ois.read(buf))!=-1)
			{
				bos.write(buf, 0, length);
			    bos.flush();
			}			
			socket.shutdownInput();
			

			//deal is still to do
			//send response
			os = socket.getOutputStream();
			oos = new ObjectOutputStream(os);
			logger.debug("send response");
			MsgTO obj = new MsgTO();
			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();
				bos.close();				
				ois.close();
				is.close();
				socket.close();
			} catch (Exception ex) 
			{
				ex.printStackTrace(System.out);
			}
		}
       }	
}

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值