简单socket编程,传输文件,JAVA


package socket_file;

import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

public class server {
private static int port = 2100;
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		String filePath = "d:\\b.jar";
		File file = new File(filePath);
		try {
			start(file);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	private static void start(File file) throws IOException {
		// TODO Auto-generated method stub
		ServerSocket server = new ServerSocket(port);
		while(true){
			Socket socket = server.accept();//在这个地方阻塞
			new Thread(new Task1(file,socket)).start();
		}
	}
	static class Task1 implements Runnable{
		private File file;
		private Socket socket;
		Task1(File file,Socket socket){
			this.file = file;
			this.socket = socket;
		}
		@Override
		public void run() {
			// TODO Auto-generated method stub
			try {
				DataInputStream in = new DataInputStream(new BufferedInputStream(new FileInputStream(file)));
				DataOutputStream out = new DataOutputStream(socket.getOutputStream());
				out.writeUTF(file.getName());
				out.flush();
				out.writeInt((int) file.length());
				out.flush();
				int bufferSize = 1024;
				byte[] size = new byte[bufferSize];
				while(true){
					int read = 0;
					if(in!=null){
						read = in.read(size);
						System.out.println("读取长度"+read);
					}
					if(read == -1){
						break;
					}
					out.write(size,0,read);
				}
				out.flush();
				socket.close();
			} catch (FileNotFoundException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		
	}

}


package socket_file;

import java.io.BufferedInputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;

public class Util {
	private String ip;
	private int port;
	private Socket socket = null;
	private DataInputStream in;
	private DataOutputStream out;

	Util(String ip, int port) {
		this.ip = ip;
		this.port = port;
	}

	public boolean getConnection() {
		try {
			if (socket != null) {
				socket.close();
			}
			socket = new Socket(ip, port);
			return true;
		} catch (UnknownHostException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			return false;
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			return false;
		}
	}

	/**
	 * @param args
	 * @throws IOException
	 */
	public DataInputStream getInformation() throws IOException {
		in = new DataInputStream(new BufferedInputStream(socket
				.getInputStream()));
		return in;

	}
}


package socket_file;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileOutputStream;
import java.io.FilePermission;
import java.io.IOException;
import java.net.Socket;

public class client {

	/**
	 * @param args
	 */
	 
	private Util socket = null;
	private String ip = "localhost";
	private int port = 2100;
	Util util;

	public client() throws IOException {
		if (isConnected()) {
			getMessage();
		}
	}

	private void getMessage() throws IOException {
		// TODO Auto-generated method stub
		if (socket == null) {
			return;
		}
		DataInputStream in = null;
		try {
			in = socket.getInformation();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			System.out.println("error");
			return;
		}
		String savePath = "e:\\";
		int bufferSize = 1024;
		byte[] size = new byte[bufferSize];

		long length;
		savePath += in.readUTF();
		DataOutputStream out = new DataOutputStream(new BufferedOutputStream(
				new FileOutputStream(savePath)));
		length = in.readLong();
		System.out.println("文件长度:" + length + "\n");
		System.out.println("开始接收文件" + "\n");
		while (true) {
			int temp = 0;
			if (in != null) {
				temp = in.read(size);
			}
			 
			if (temp == -1) {
				break;
			}
			 
			out.write(size, 0, (int) temp);
		}
		System.out.println("接收完成,存储在" + savePath + "中");
		out.close();
	}

	public boolean isConnected() {
		socket = new Util(ip, port);
		if (socket.getConnection())
			return true;
		else
			return false;
	}

	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
		new client();
	}

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在MATLAB中,NURBS(非均匀有理B样条)是一种强大的数学工具,用于表示和处理复杂的曲线和曲面。NURBS在计算机图形学、CAD(计算机辅助设计)、CAM(计算机辅助制造)等领域有着广泛的应用。下面将详细探讨MATLAB中NURBS的绘制方法以及相关知识点。 我们需要理解NURBS的基本概念。NURBS是B样条(B-Spline)的一种扩展,其特殊之处在于引入了权重因子,使得曲线和曲面可以在不均匀的参数空间中进行平滑插值。这种灵活性使得NURBS在处理非均匀数据时尤为有效。 在MATLAB中,可以使用`nurbs`函数创建NURBS对象,它接受控制点、权值、 knot向量等参数。控制点定义了NURBS曲线的基本形状,而knot向量决定了曲线的平滑度和分布。权值则影响曲线通过控制点的方式,大的权值会使曲线更靠近该点。 例如,我们可以使用以下代码创建一个简单的NURBS曲线: ```matlab % 定义控制点 controlPoints = [1 1; 2 2; 3 1; 4 2]; % 定义knot向量 knotVector = [0 0 0 1 1 1]; % 定义权值(默认为1,如果未指定) weights = ones(size(controlPoints,1),1); % 创建NURBS对象 nurbsObj = nurbs(controlPoints, weights, knotVector); ``` 然后,我们可以用`plot`函数来绘制NURBS曲线: ```matlab plot(nurbsObj); grid on; ``` `data_example.mat`可能包含了一个示例的NURBS数据集,其中可能包含了控制点坐标、权值和knot向量。我们可以通过加载这个数据文件来进一步研究NURBS的绘制: ```matlab load('data_example.mat'); % 加载数据 nurbsData = struct2cell(data_example); % 转换为cell数组 % 解析数据 controlPoints = nurbsData{1}; weights = nurbsData{2}; knotVector = nurbsData{3}; % 创建并绘制NURBS曲线 nurbsObj = nurbs(controlPoints, weights, knotVector); plot(nurbsObj); grid on; ``` MATLAB还提供了其他与NURBS相关的函数,如`evalnurbs`用于评估NURBS曲线上的点,`isoparm`用于生成NURBS曲面上的等参线,以及`isocurve`用于在NURBS曲面上提取特定参数值的曲线。这些工具对于分析和操作NURBS对象非常有用。 MATLAB中的NURBS功能允许用户方便地创建、编辑和可视化复杂的曲线和曲面。通过对控制点、knot向量和权值的调整,可以精确地控制NURBS的形状和行为,从而满足各种工程和设计需求。通过深入理解和熟练掌握这些工具,可以在MATLAB环境中实现高效的NURBS建模和分析。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值