本地模拟下载文件

服务端 开启

package com.zking.test2;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;

//服务端
public class FileServer {

	public static void main(String[] args) throws Exception {
		System.out.println("------服务端------------");
		// 开启服务器
		ServerSocket ss = new ServerSocket(7979);
		// 等待客户端丽连接
		Socket sk = ss.accept();
		System.out.println("已连接");

		// 输入流 读取客户端发送过来的消息
		InputStream is = sk.getInputStream();
		InputStreamReader isr = new InputStreamReader(is);
		BufferedReader br = new BufferedReader(isr);

		// 资源路径
		String readLine = br.readLine();

		// File
		File file = new File(readLine);
		FileInputStream fis = null;
		InputStreamReader isr2 = null;
		BufferedReader br2 = null;

		// 写进网络中
		OutputStream os = sk.getOutputStream();
		OutputStreamWriter osw = new OutputStreamWriter(os);
		BufferedWriter bw = new BufferedWriter(osw);

		if (file.exists()) {// 存在
			// 读取服务器中指定资源的内容
			fis = new FileInputStream(file);
			isr2 = new InputStreamReader(fis);
			br2 = new BufferedReader(isr2);
			String str = "";
			while (null != (str = br2.readLine())) {
				bw.write(str);
				bw.newLine();
				bw.flush();
			}
		} else {// 文件资源路径不存在
			bw.write("文件查找不到");
			bw.newLine();
			bw.flush();
		}

		// 关闭所有资源
		bw.close();
		osw.close();
		os.close();
		if (null != br2) {
			br2.close();
		}
		if (null != isr2) {
			isr2.close();
		}
		if (null != fis) {
			fis.close();
		}
		br.close();
		isr.close();
		is.close();
		ss.close();

	}

}

客户端上传下载路径

package com.zking.test2;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;

//客户端
public class FileClient {
	public static void main(String[] args) throws Exception {
		Scanner sc = new Scanner(System.in);
		// 开启客户端
		Socket sk = new Socket("127.0.0.1", 7979);
		System.out.println("OK");
		System.out.println("请输入要下载的资源路径: ");
		String filePath = sc.next();

		// 将资源路径写进网络中
		OutputStream os = sk.getOutputStream();
		OutputStreamWriter osw = new OutputStreamWriter(os);
		BufferedWriter bw = new BufferedWriter(osw);

		bw.write(filePath);
		bw.newLine();
		bw.flush();

		// 接收服务端发送的内容
		InputStream inputStream = sk.getInputStream();
		InputStreamReader isr = new InputStreamReader(inputStream);
		BufferedReader br = new BufferedReader(isr);

		// 得到文件的名称
		String fileName = filePath.substring(filePath.lastIndexOf("/"));

		// 读取到内容后 通过文件写入本地中
		FileOutputStream fos = new FileOutputStream("D:\\zking\\" + fileName);
		BufferedWriter bw2 = new BufferedWriter(new OutputStreamWriter(fos));

		String str = br.readLine();
		if ("文件查找不到".equals(str)) {
			System.out.println("资源不存在");
		} else {
			System.out.println(str);
			bw2.write(str);
			bw2.newLine();
			bw2.flush();
			while (null != (str = br.readLine())) {
				// System.out.println(str);
				bw2.write(str);
				bw2.newLine();
				bw2.flush();

				// write(byte[],0,len)
			}
		}

	}
}

实现客户端与服务端发送消息简化版 窗体

package com.zking.test2;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;

//服务端
public class QQServerChat extends JFrame {
	ServerSocket ss = null;
	Socket sk = null;
	// 上
	JPanel jpa = new JPanel();
	JButton jba = new JButton("启动服务");
	// 中
	JTextArea jta = new JTextArea();
	JScrollPane jsp = new JScrollPane(jta);

	// 下
	JPanel jpb = new JPanel();
	JTextField jtfa = new JTextField(15);
	JButton jbb = new JButton("发送");
	JButton jbc = new JButton("接收");

	public QQServerChat() {
		this.setTitle("");
		this.setSize(400, 500);
		this.setDefaultCloseOperation(3);
		this.setLocationRelativeTo(null);
		
		
		//窗体事件
		this.addWindowListener(new WindowListener() {
			
			@Override
			public void windowOpened(WindowEvent e) {
				// TODO Auto-generated method stub
				
			}
			
			@Override
			public void windowIconified(WindowEvent e) {
				// TODO Auto-generated method stub
				
			}
			
			@Override
			public void windowDeiconified(WindowEvent e) {
				// TODO Auto-generated method stub
				
			}
			
			@Override
			public void windowDeactivated(WindowEvent e) {
				// TODO Auto-generated method stub
				
			}
			
			@Override
			public void windowClosing(WindowEvent e) {
				// TODO Auto-generated method stub
				
			}
			
			@Override
			public void windowClosed(WindowEvent e) {
				//当窗体被关闭的时候,将页面上所有的流对象去拿不关闭
				
				//isr.close
			}
			
			@Override
			public void windowActivated(WindowEvent e) {
				// TODO Auto-generated method stub
				
			}
		});
		
		

		jpa.add(jba);

		jpb.add(jtfa);
		jpb.add(jbb);
		jpb.add(jbc);

		this.getContentPane().add(jpa, "North");
		this.getContentPane().add(jsp, "Center");
		this.getContentPane().add(jpb, "South");

		/**
		 * jba启动服务器的点击事件
		 */
		jba.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				// ServerSocket实例化
				try {
					ss = new ServerSocket(8989);
					// 提示内容设置到jta文本域中
					jta.append("服务器已开启...等待客户端连接;服务器的端口号为: " + ss.getLocalPort() + "\n");
				} catch (IOException e1) {
					e1.printStackTrace();
				}
				
				// 通过多线程解决阻塞的问题
				// 请一个机器人时刻监控来连接服务器的客户端
				new Thread() {
					// 重写一个方法
					public void run() {
						while (true) {
							try {
								sk = ss.accept();
							} catch (IOException e) {
								// TODO Auto-generated catch block
								e.printStackTrace();
							}
							jta.append("客户端上线了.....\n");
						}
					};
				}.start();
				
				//
				// 再请一个机器人自动帮我们接收客户端发送的消息
				new Thread() {
					public void run() {
						while (true) {
							//让小弟先休息一下
							try {
								Thread.sleep(500);
							} catch (InterruptedException e) {
								// TODO Auto-generated catch block
								e.printStackTrace();
							}
							if(sk!=null) {
								try {
								InputStream is = sk.getInputStream();
								InputStreamReader isr = new InputStreamReader(is);
								BufferedReader br = new BufferedReader(isr);
								String readLine = br.readLine();
								jta.append("客户端说: "+readLine+"\n");
								} catch (IOException e) {
									// TODO Auto-generated catch block
									e.printStackTrace();
								}
							}
						}
					};
				}.start();

				
				
			}
		});

		/**
		 * 发送信息
		 */
		jbb.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				// 获取输入框的内容
				String content = jtfa.getText();

				// 通过sk套接字调用网络流 写入
				if (sk != null) {// 成功连上了
					try {
						OutputStream os = sk.getOutputStream();
						OutputStreamWriter osw = new OutputStreamWriter(os);
						BufferedWriter bw = new BufferedWriter(osw);
						// 写
						bw.write(content);
						bw.newLine();
						bw.flush();
						// 将内容设置上去
						jta.append("服务器说: " + content + "\n");
					} catch (IOException e1) {
						// TODO Auto-generated catch block
						e1.printStackTrace();
					}
				}
			}
		});

		// 接收
		jbc.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				if (sk != null) {
					try {
						InputStream is = sk.getInputStream();
						InputStreamReader isr = new InputStreamReader(is);
						BufferedReader br = new BufferedReader(isr);

						String content = br.readLine();

						jta.append("\t客户端: " + content + "\n");
					} catch (IOException e1) {
						// TODO Auto-generated catch block
						e1.printStackTrace();
					}
				}
			}
		});

		this.setVisible(true);
	}

	public static void main(String[] args) {
		new QQServerChat();
	}

}
package com.zking.test2;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.Socket;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;

//客户端
public class QQClientChat extends JFrame {

	Socket sk = null;

	// 上
	JPanel jpa = new JPanel();
	JLabel jla = new JLabel("IP地址");
	JTextField jtfa = new JTextField(10);
	JLabel jlb = new JLabel("端口号");
	JTextField jtfb = new JTextField(10);
	JButton jba = new JButton("连接服务器");
	// 中
	JTextArea jta = new JTextArea();
	JScrollPane jsp = new JScrollPane(jta);

	// 下
	JPanel jpb = new JPanel();
	JTextField jtfc = new JTextField(15);
	JButton jbb = new JButton("发送");
	JButton jbc = new JButton("接收");

	public QQClientChat() {
		this.setTitle("");
		this.setSize(500, 500);
		this.setDefaultCloseOperation(3);
		this.setLocationRelativeTo(null);

		jtfa.setText("127.0.0.1");
		jtfb.setText("8989");

		jpa.add(jla);
		jpa.add(jtfa);
		jpa.add(jlb);
		jpa.add(jtfb);
		jpa.add(jba);

		jpb.add(jtfc);
		jpb.add(jbb);
		jpb.add(jbc);

		this.getContentPane().add(jpa, "North");
		this.getContentPane().add(jsp, "Center");
		this.getContentPane().add(jpb, "South");

		/**
		 * jba客户端连接服务器按钮的点击事件
		 * 
		 */
		jba.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				String ip = jtfa.getText();
				int port = Integer.valueOf(jtfb.getText());
				try {
					sk = new Socket(ip, port);
					jta.append("客户端已成功连上服务器\n");
				} catch (IOException e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				}
				
				//客户端接收
				new Thread() {
					public void run() {
						while(true) {
							if (sk != null) {
								try {
									InputStream is = sk.getInputStream();
									InputStreamReader isr = new InputStreamReader(is);
									BufferedReader br = new BufferedReader(isr);

									String content = br.readLine();

									jta.append("\t服务器: " + content + "\n");
								} catch (IOException e1) {
									// TODO Auto-generated catch block
									e1.printStackTrace();
								}
							}
						}
					};
				}.start();
				
			}
		});

		/**
		 * 发送信息
		 */
		jbb.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				// 获取输入框的内容
				String content = jtfc.getText();
				System.out.println(content);
				// 通过sk套接字调用网络流 写入
				if (sk != null) {// 成功连上了
					try {
						OutputStream os = sk.getOutputStream();
						OutputStreamWriter osw = new OutputStreamWriter(os);
						BufferedWriter bw = new BufferedWriter(osw);
						// 写
						bw.write(content);
						bw.newLine();
						bw.flush();
						// 将内容设置上去
						jta.append("客户端说: " + content + "\n");
					} catch (IOException e1) {
						// TODO Auto-generated catch block
						e1.printStackTrace();
					}
				}
			}
		});

		// 接收
		jbc.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				if (sk != null) {
					try {
						InputStream is = sk.getInputStream();
						InputStreamReader isr = new InputStreamReader(is);
						BufferedReader br = new BufferedReader(isr);

						String content = br.readLine();

						jta.append("\t服务器: " + content + "\n");
					} catch (IOException e1) {
						// TODO Auto-generated catch block
						e1.printStackTrace();
					}
				}
			}
		});
//		Thread-线程
		this.setVisible(true);
	}

	public static void main(String[] args) {
		new QQClientChat();
	}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值