java_网络编程学习笔记(二)

TCP复制文件

客户端:
package cn.wangyu.net;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;

/** 
 * @author JiangMinyan
 *
 * @version 2016/02/22 11:20:43
 */
public class TextClient {

	public static void main(String[] args) throws Exception{
		
		Socket client = new Socket("192.168.21.158", 10005);
		
		BufferedReader bufr = new BufferedReader(new FileReader("Chat.java"));
		PrintWriter writer = new PrintWriter(client.getOutputStream(), true);
		
		//利用时间戳进行标记的方法,是客户端断开。
//		DataOutputStream dos = new DataOutputStream(client.getOutputStream());
//		long time = System.currentTimeMillis();
//		dos.writeLong(time);
		
		String line = null;
		while((line = bufr.readLine()) != null){
			
			writer.println(line);
		}
		
//		writer.println(time);
		//jdk 提供的socket的方法
		client.shutdownOutput();//关闭客户端输出流,相当于给流中加入结束标记.
		
		BufferedReader bufIn = new BufferedReader(new InputStreamReader(client.getInputStream()));
		String str = bufIn.readLine();
		System.out.println(str);
		
		bufr.close();
		client.close();
	}
}
服务端:
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.FileWriter;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;


public class TextServer {

	public static void main(String[] args) throws Exception{
		
		ServerSocket server = new ServerSocket(10005);
		
		Socket socket = server.accept();
		System.out.println(socket.getInetAddress().getHostAddress() + "......connected");
		
		BufferedReader bufIn = new BufferedReader(new InputStreamReader(socket.getInputStream()));
		PrintWriter out = new PrintWriter(new FileWriter("server.txt"), true);
		
//		DataInputStream dis = new DataInputStream(socket.getInputStream());
//		long time = dis.readLong();
		
		String line = null;
		while((line = bufIn.readLine()) != null){
			
//			if ((time+"").equals(line)) {
//				break;
//			}
			out.println(line);
		}
		
		PrintWriter writer = new PrintWriter(socket.getOutputStream(), true);
		writer.println("上传成功");
		
		out.close();
		socket.close();
		server.close();
		
	}
}

并发图片上传

客户端:
package cn.wangyu.net;

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;

/** 
 * @author JiangMinyan
 *
 * @version 2016/02/22 13:54:35
 */
public class ImageClient {

	public static void main(String[] args) throws Exception{

		uploadImage("f://1.bmp");
	}
	
	public static void uploadImage(String path) throws Exception{
		
		File file = new File(path);
		if (!(file.exists() && file.isFile())) {
			System.out.println("该文件有问题,要么不存在,要么不是文件");
			return;
		}
		if (!file.getName().endsWith(".jpg")) {
			System.out.println("图片格式错误,请重新选择");
			return;
		}
		if (file.length() > 1024*1024*5) {
			System.out.println("图片过大,请重新选择");
			return;
		}
		
		Socket client = new Socket("192.168.21.158", 10006);
		
		FileInputStream fis = new FileInputStream(file);
		OutputStream out = client.getOutputStream();
		
		byte[] buf = new byte[1024];
		int len = 0;
		while((len=fis.read(buf)) != -1){
			out.write(buf, 0, len);
		}
		
		//告诉服务端数据已写完
		client.shutdownOutput();
		
		InputStream in = client.getInputStream();
		byte[] bufIn = new byte[1024];
		int num = in.read(bufIn);
		System.out.println(new String(bufIn, 0, num));
		
		fis.close();
		client.close();
	}
}

服务端:
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;

public class ImageThread implements Runnable{

	private Socket client;
	
	public ImageThread(Socket client) {
		this.client = client;
	}
	
	public void run() {

		int count = 1;
		
		try {
			
			System.out.println(client.getInetAddress().getHostAddress() + ".....connected");
			
			InputStream in = client.getInputStream();
			
			File file = new File(client.getInetAddress().getHostAddress()+"("+ count +")"+".jpg");
			while (file.exists()) {
				file = new File(client.getInetAddress().getHostAddress()+"("+ (count++) +")"+".jpg");
			}
			
			FileOutputStream fos = new FileOutputStream(file);
			
			byte[] buf = new byte[1024];
			int len = 0;
			
			while((len=in.read(buf)) != -1){
				fos.write(buf, 0, len);
			}
			
			
			OutputStream out = client.getOutputStream();
			out.write("上传成功".getBytes());
			
			fos.close();
			client.close();
		} catch (Exception e) {
			throw new RuntimeException("上传失败");
		}
	}

}
import java.net.ServerSocket;
import java.net.Socket;


public class ImageServer {

	public static void main(String[] args)throws Exception {
		
		ServerSocket server = new ServerSocket(10006);
		
		while(true){

			Socket client = server.accept();
			new Thread(new ImageThread(client)).start();
		}
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值