Java实现的网络文件传送

FileUpload包下放了三个类:

OpenAndSave.java

TCPClient .java

TCPServer.java

1、OpenAndSave.java

package FileUpload;
import java.awt.*;
import javax.swing.*;
import java.util.*;
import java.io.*;
public class OpenAndSave extends JFrame {

	// 选择打开文件
	public String getFile() {
		String fileName="";
		FileDialog fd = new FileDialog(this, "请选择要传给zpc的文件", FileDialog.LOAD);
		fd.setDirectory("C:\\");
		fd.setVisible(true);
		// 获取此文件对话框选定的文件
		if (fd.getFile()!= null) {
			fileName=fd.getDirectory() + fd.getFile();
			System.out.println("已选择打开 " +fileName );
		}
		return fileName;
	}

	// 保存文件
	public OutputStream saveFile(String fileName) {
		OutputStream os=null;
		try {
			FileDialog fd = new FileDialog(this, "保存文件", FileDialog.SAVE);
			// 对话框打开时显示默认的目录
			fd.setDirectory("C:\\");
			fd.setFile(fileName);
			fd.setVisible(true);
			if (fd.getFile() != null) {
				File myFile = new File(fd.getDirectory(), fd.getFile());
				os = new FileOutputStream(myFile);
			}
		} catch (IOException ioe) {
			JOptionPane.showMessageDialog(this, "文件保存发生错误,已停止");
		}
		return os;
	}
}

2、TCPServer.java

/*
 * Author:zpc
 * Time:2014-5-1
 */
package FileUpload;
import java.io.*;
import java.net.*;
import java.util.Random;
import javax.swing.*;

//每接受一个客户端请求单开一个线程处理
class UploadProcess implements Runnable {
	private Socket s;

	public UploadProcess(Socket s) {
		this.s = s;
	}

	public void run() {
		OutputStream fos = null;
		try {
			DataInputStream fis = new DataInputStream(s.getInputStream());// 和复制文件不同的是网络上传文件是从Socket中获取的I/O流对象
			String fileName = fis.readUTF();
			DataOutputStream fos1= new DataOutputStream(s.getOutputStream());//写回信息;
			if ((JOptionPane.showOptionDialog(null,
					"您想接受文件" + fileName + "吗?", "消息",
					JOptionPane.YES_NO_OPTION, 0, null, null, null)) == 0) {
				System.out.println("我已选择接受文件!");
				String message1="服务器已接收!";
				fos1.writeUTF(message1);
				fos = new OpenAndSave().saveFile(fileName);
				int len = 0;
				byte[] bytes = new byte[1024];
				if (fis != null) {
					while ((len = fis.read(bytes)) != -1) {
						fos.write(bytes, 0, len);
					}
				}
				JOptionPane.showMessageDialog(null, "文件保存成功!");
				if (fis != null)
					fis.close();
				if (fos != null)
					fos.close();
			}
			else {
				System.out.println("我选择了拒绝接受!");
				String message2="提示:对方已拒绝接受!";
				fos1.writeUTF(message2);
			}
		} catch (Exception e) {
			System.out.println("接受文件失败!");
		}
	}
}

public class TCPServer {
	public static void main(String[] args) throws IOException {
		// 建立服务器端的socket对象ServerSocket
		ServerSocket ss = new ServerSocket(10001);
		while (true) {
			Socket s = ss.accept();
			// 每个客户端的请求创建一个Socket对象,单开一个线程处理
			new Thread(new UploadProcess(s)).start();
		}
	}
}

3、TCPClient .java

/*
 * Author:zpc
 * Function:上传文件给用户zpc
 * Time:2014-5-1
 */
package FileUpload;
import java.io.*;
import java.net.*;
public class TCPClient {
	public static void main(String[] args) throws UnknownHostException{
		// 进行文件的读取.数据源
		OpenAndSave open = new OpenAndSave();
		String fileName = open.getFile();
		File myFile = new File(fileName);
		InputStream in = null;
		try {
			in = new FileInputStream(myFile);
		} catch (FileNotFoundException e1) {
			System.out.println("未选中文件!");
		}
		// 数据目的地是另一台主机,通过Socket获取I/O流
		if (in != null) {
			Socket s = null;
			try {
				s = new Socket("127.0.0.1", 10001);//这里写好目标机器IP地址和任意一个开放的未被其它程序占用的端口号
				DataOutputStream os = new DataOutputStream(s.getOutputStream());
				os.writeUTF(fileName);
				byte[] b = new byte[1024];
				int len = 0;
				while ((len = in.read(b)) != -1) {
					os.write(b, 0, len);
				}
				//System.out.println("message");
				DataInputStream fis = new DataInputStream(s.getInputStream());
				String message = fis.readUTF();
				System.out.println(message);
				if (os != null)
					os.close();
				if (in != null)
					in.close();
			} catch (Exception e) {
				System.out.println("貌似zpc不在线,稍后再传!!");
			}
		} else {
			System.out.println("文件读取失败(in = null)!");
		}
	}
}

Java实现的网络文件传送

时间: 2024-11-07 00:47:35

Java实现的网络文件传送的相关文章

Java TCP使用Socket进行网络文件传送(5)

作者 : 卿笃军 原文地址:http://blog.csdn.net/qingdujun/article/details/39324737 本文演示,TCP使用Socket进行网络文件传送,实现将客户端的文件upload.txt上传到服务器. 1)客户端,上传文件upload.txt,并接受服务器反馈上传成功与否消息. 2)服务器,接受客户端文件,将接收到的文件命名为Rece.txt,同时给客户端发送消息"上传成功". 客户端,代码如下: package upload.file.cli

Java学习之网络编程实例

转自:http://www.cnblogs.com/springcsc/archive/2009/12/03/1616413.html 多谢分享 网络编程 网络编程对于很多的初学者来说,都是很向往的一种编程技能,但是很多的初学者却因为很长一段时间无法进入网络编程的大门而放弃了对于该部分技术的学习. 在学习网络编程以前,很多初学者可能觉得网络编程是比较复杂的系统工程,需要了解很多和网络相关的基础知识,其实这些都不是很必需的.首先来问一个问题:你 会打手机吗?很多人可能说肯定会啊,不就是按按电话号码

Java中的网络支持InetAddress&URL

针对网络通信的不同层次,Java提供的网络功能有四大类 InetAddress:用于标识网络上的硬件资源.(说白了就是IP地址的相关信息) URL:统一资源定位符,通过URL可以直接读取或写入网络上的数据 Sockets:使用TCP协议实现网络通信的Socket相关的类 Datagram:使用UDP协议,将数据保存在数据报中,通过网络进行通信.(通过在网络中发送数据报进而实现网络的通信) InetAddress类用于标识网络上的硬件资源,表示互联网协议(IP)协议. 1 package zhan

java基础篇---网络编程

一:IP与InetAddress 在Java中支持网络通讯程序的开发,主要提供了两种通讯协议:TCP协议,UDP协议 可靠地连接传输,使用三方握手的方式完成通讯 不可靠的连接传输,传输的时候接受方不一定可以接受的到 在Java中的所有网络程序的开发类都在java.net包中存在 IP地址简介 IP地址是指互联网协议地址(英语:Internet Protocol Address,又译为网际协议地址),是IP Address的缩写.IP地址是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络

黑马程序员————java中的网络编程

------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流! ------- java中的网络编程 一.网络编程概述:基于互联网的编程 就是用来实现网络互连的不同计算机上运行的程序间可以进行数据交换. 二.网络模型:OSI和TCP/IP 1.OSI(Open System Interconnection开放系统互连

66.JAVA编程思想——网络编程

66.JAVA编程思想--网络编程 历史上的网络编程都倾向于困难.复杂,而且极易出错. 程序员必须掌握与网络有关的大量细节,有时甚至要对硬件有深刻的认识.一般地,我们需要理解连网协议中不同的"层"(Layer).而且对于每个连网库,一般都包含了数量众多的函数,分别涉及信息块的连接.打包和拆包:这些块的来回运输:以及握手等等.这是一项令人痛苦的工作.但是,连网本身的概念并不是很难.我们想获得位于其他地方某台机器上的信息,并把它们移到这儿:或者相反.这与读写文件非常相似,只是文件存在于远程

项目日志之基于Java socket的网络通讯

Java API网络类包中的Socket类是网络上运行的两个程序间双向通信的一端,它既可以接受请求,也可以发送请求,利用它可以较为方便的编写网络上数据的传递.我们打算通过Java中基于Socket的网络编程实现一个简单的网络通信程序.这就是我们团队项目(开发一款简单的通讯软件,其基本功能是实现一对一的网络信息通讯,并努力向一对多和多对多靠近)的主要内容. 一.Java socket通信开发原理(查阅资料): 服务器使用ServerSocket监听指定的端口,端口可以随意指定(由于1024以下的端

java socket 多线程网络传输多个文件

http://blog.csdn.net/njchenyi/article/details/9072845 java socket 多线程网络传输多个文件 2013-06-10 21:26 3596人阅读 评论(1) 收藏 举报  分类: JAVA(158)  由于需要研究了下用 java socket 传输文件,由于需要传输多个文件,因此,采用了多线程设计.客户端每个线程创建一个 socket 连接,每个 socket 连接负责传输一个文件,服务端的ServerSocket每次 accept

Java Socket通讯---网络基础

java socket 通讯 参考慕课网:http://www.imooc.com/learn/161 一.网络基础知识 1.1 通讯示意图 1.2 TCP/IP协议 TCP/IP是世界上应用最为广泛的协议 是以TCP/IP为基础的不同层次上多个协议的集合 也称TCP/IP协议簇 或 TCP/IP协议栈 TCP:Transmission Control Protocol, 传输控制协议 IP:Internet Protocol,互联网协议 1.3 TCP/IP模型 1.4 IP地址 为实现网络中