- 浏览: 52561 次
- 性别:
- 来自: 北京
最新评论
/*服务器端接收文件*/ import java.io.File; import java.io.IOException; import java.io.InputStream; import java.io.RandomAccessFile; import java.net.ServerSocket; import java.net.Socket; import javax.swing.JFileChooser; /** * 该类用到的绑定端口初始为10000,如果绑定不成功则试另外的端口; * 绑定次数用tryBindTimes变量,表示如果绑定失败会对它加一; * 当前绑定端口由DefaultBindPort+tryBindTimes决定; * 外界系统(调用此程序的对象)可以获取当前的帮定端口; * 并告诉客户端服务的端口号以使其能正确连接到该端口上; * @author * */ public class GetFile extends Thread { // 服务套接字等待对方的连接和文件发送 ServerSocket serSocket; // 由服务套接字产生的 套接字 Socket tempSocket; // 用于读取 InputStream inSocket; // 随机访问文件 RandomAccessFile inFile = null; // 临时缓寸区 byte byteBuffer[] = new byte[1024]; // 默认用10000端口监听请求 int defaultBindPort = 10000; // 初始的绑定端口次数为0 int tryBindTimes = 0; // 当前绑定的端口号是10000默认端口 int currentBindPort = defaultBindPort + tryBindTimes; /** * @构造方法 * @抛出异常的原因是无法绑定服务的端口 * */ public GetFile(int port) throws Exception { try { // 绑定服务的端口 this.bindToServerPort(); } catch (Exception e) { e.printStackTrace(); // 绑定不成功重试 System.out.println(e.toString()); throw new Exception("绑定端口不成功!"); } // 文件选择器以当前的目录打开 JFileChooser jfc = new JFileChooser("."); jfc.showSaveDialog(new javax.swing.JFrame()); // 获取当前的选择文件引用 File savedFile = jfc.getSelectedFile(); // 已经选择了文件 if (savedFile != null) { // 读取文件的数据,可以每次以快的方式读取数据 inFile = new RandomAccessFile(savedFile, "rw"); } } /** * @监控线程 */ public void run() { try { if (this.inFile == null) { System.out.println("没有选择文件"); // 关闭服务方套接字 this.serSocket.close(); // 没有选择文件 return; } System.out.println("wait for..." + '\n' + "等待对方接入"); // 等待对方的连接 tempSocket = serSocket.accept(); // 五秒钟连不上将抛出异常 this.serSocket.setSoTimeout(5000); // 获取输入流 this.inSocket = tempSocket.getInputStream(); } catch (Exception ex) { System.out.println(ex.toString()); ex.printStackTrace(); return; } // 以下为传送文件代码和 套接字清理工作 int amount; try { while ((amount = inSocket.read(byteBuffer)) != -1) { inFile.write(byteBuffer, 0, amount); } // 关闭流 inSocket.close(); javax.swing.JOptionPane.showMessageDialog(new javax.swing.JFrame(), "已接收成功", "提示!", javax.swing.JOptionPane.PLAIN_MESSAGE); System.out.println("Get OK"); System.out.println("接收完毕!"); // 关闭文件 inFile.close(); // 关闭临时套接字 tempSocket.close(); // 关闭服务方套接字 this.serSocket.close(); } catch (IOException e) { System.out.println(e.toString()); e.printStackTrace(); } } /** * @绑定端口 * @throws Exception 抛出异常的原因是无法绑定服务的端口 */ private void bindToServerPort() throws Exception { try { // 输出绑定的端口号到当前的控制台上 System.out.println("试绑定的端口号是:" + this.currentBindPort); // 在自己的机器上开一个服务类套接字并等待发送者的连接 serSocket = new ServerSocket(this.currentBindPort); } catch (Exception e) { e.printStackTrace(); // 绑定不成功重试 System.out.println(e.toString()); // 试了不止一次了 this.tryBindTimes = this.tryBindTimes + 1; // 可查看试的次数getTryBindedTimes this.currentBindPort = this.defaultBindPort + this.tryBindTimes; // 如果试的次数超过20次 退出 if (this.tryBindTimes >= 20) { throw new Exception("无法绑定到指定端口" + '\n' + "试了太多次了!"); } // 递归的绑定 this.bindToServerPort(); } // 输出绑定的端口号到当前的控制台上 System.out.println("成功绑定的端口号是: " + this.currentBindPort); } // 获取试绑定的端口 public int getTryBindedTimes() { return this.tryBindTimes; } // 获取已经绑定的端口 public int getCurrentBindingPort() { return this.currentBindPort; } /** * @测试方法 * @param args */ public static void main(String args[]) { GetFile getFile = null; try { getFile = new GetFile(10000); } catch (Exception e) { e.printStackTrace(); System.out.println("无法传送文件!"); System.exit(1); } getFile.start(); } }
/*文件发送端*/ import java.io.File; import java.io.IOException; import java.io.OutputStream; import java.io.RandomAccessFile; import java.net.Socket; import javax.swing.JFileChooser; /** * 在服务器端开启的情况下 实例化套接字 并发送文件 * * @author */ public class SendFile extends Thread { // 远程的IP字符串 String remoteIPString = null; // 远程的服务端口 int port; // 临时套接字 Socket tempSocket; // 发送文件用的输出流 OutputStream outSocket; // 欲发送的文件 RandomAccessFile outFile; // 发送文件用的临时缓存区 byte byteBuffer[] = new byte[1024]; /** * 构造方法仅用于选择发送文件的位置 并从外部接收远程地址和端口 * */ public SendFile(String remoteIPString, int port) { try { this.remoteIPString = remoteIPString; this.port = port; // 选择发送的文件位置 JFileChooser jfc = new JFileChooser("."); File file = null; int returnVal = jfc.showOpenDialog(new javax.swing.JFrame()); if (returnVal == JFileChooser.APPROVE_OPTION) { file = jfc.getSelectedFile(); } outFile = new RandomAccessFile(file, "r"); } catch (Exception e) { } } /** * 先决条件是服务器端先开启 * */ public void run() { try { this.tempSocket = new Socket(this.remoteIPString, this.port); System.out.println("与服务器连接成功!"); outSocket = tempSocket.getOutputStream(); int amount; System.out.println("开始发送文件..."); while ((amount = outFile.read(byteBuffer)) != -1) { outSocket.write(byteBuffer, 0, amount); System.out.println("文件发送中..."); } System.out.println("Send File complete"); javax.swing.JOptionPane.showMessageDialog(new javax.swing.JFrame(), "已发送完毕", "提示!", javax.swing.JOptionPane.PLAIN_MESSAGE); outFile.close(); tempSocket.close(); } catch (IOException e) { System.out.println(e.toString()); e.printStackTrace(); } } /** * 测试方法 * * @param args */ public static void main(String args[]) { SendFile sf = new SendFile("127.0.0.1", 10000); sf.start(); } }
发表评论
文章已被作者锁定,不允许评论。
-
JProfiler 9.X License
2015-12-03 13:50 3L-Larry_Lau@163.com#23874-hrw ... -
ExecutorService 线程池
2014-07-07 17:27 931/** * ExecutorServiceAnalyze ... -
ConcurrentHashMap分析及使用
2014-06-30 18:24 712/** * ConcurrentHashMapAnaly ... -
JAVA检测文件字符编码
2011-12-20 15:01 1489JAR: http://sourceforge.ne ... -
JAVA常用加密算法应用
2010-06-03 11:35 973一.MD5加密,常用于加密用户名密码,当用户验证时: pro ... -
使用Java实现数据报通讯过程
2010-06-03 11:32 1235数据报(Datagram)是网络层数据单元在介质上传输信息 ... -
基于JAVA的SNMP协议报文的Socket通讯
2010-06-03 11:13 33771.引言 自从八十年 ... -
使用Java控制UDP协议
2010-06-03 11:10 1345UDP协议 UDP协议的全称是用户数据报,在网络中它与TCP ...
相关推荐
在这个场景中,我们讨论的是如何使用Java的Socket来实现文件上传功能,即从客户端将文件发送到服务器,然后保存到服务器的数据库中。这个过程涉及到多个关键知识点,下面我们将详细探讨。 1. **Java Socket基础**:...
在大文件传输中,Socket用于建立客户端与服务器之间的连接,并负责数据的发送和接收。 - **ServerSocket**:服务器端使用ServerSocket监听特定端口,等待客户端的连接请求。 4. **NIO(Non-blocking I/O)** - **...
当用户点击“发送”按钮时,文件选择的结果会被传递给后台处理线程,该线程负责文件的读取和通过Socket发送。 文件的传输通常采用分块读写的方式,因为一次性读取整个大文件可能会导致内存溢出。可以通过设置合适的...
在Java中,我们可以使用`java.net.Socket`和`java.net.ServerSocket`类来创建和管理Socket。客户端使用`Socket`类创建连接到服务器的实例,而服务器端则使用`ServerSocket`类监听传入的连接请求。 1. **服务器端...
在本文中,我们将深入探讨如何利用Java Socket进行不同格式文件的传输,确保数据的完整性和传输速度。 一、Java Socket基础 Java Socket分为ServerSocket和Socket两种类型。ServerSocket用于监听客户端连接,Socket...
在Socket通信中,我们通常会将文件内容封装成字节流,然后通过Socket发送。 4. **套接字输入/输出流(SocketInputStream/SocketOutputStream)**: - Socket类提供了与之相关的输入流和输出流,用于在网络中进行...
在这个"Java Socket聊天和文件传输工具"中,开发者利用Socket API创建了一个实用的工具,能够实现用户间的文本聊天功能以及文件的传输。虽然源代码未提供,但我们可以根据已知的信息探讨其背后的原理和技术要点。 1...
在这个“Java Socket聊天和文件传输工具”中,开发者结合了实时聊天和文件传输的功能,使得用户可以在进行文字交流的同时,无缝地进行文件的交换。这个工具在局域网环境中已经过初步测试,表明其稳定性和效率都达到...
在"Java Socket 视频流转发Socket"这个主题中,我们将深入探讨如何使用Java Socket来处理视频流的传输。 首先,让我们了解什么是ServerSocket。在Java中,`java.net.ServerSocket`类是服务器端使用的,它监听特定...
Java Socket电子邮件发送与接收是基于Java网络编程技术实现的一种通信方式,主要涉及到Java的Socket类以及Email相关的API。本项目是一个课程项目,开发者通过几天的努力完成了一个具备图形用户界面(GUI)的邮件系统...
在"socket发送接收文件"的过程中,通常采用客户端-服务器模型。服务器端创建一个监听Socket,等待客户端的连接请求。一旦客户端连接成功,双方就可以通过已建立的连接进行数据交换。数据可以是以字节流形式的文件...
总的来说,这个Java项目旨在教你如何利用TCP/IP协议在Eclipse环境中开发一个程序,实现在网络上发送和接收XML文件,这对于理解网络编程和XML处理有很好的实践价值。通过学习和实践,你可以增强自己在网络通信和数据...
Socket允许应用程序通过TCP/IP协议发送和接收数据,为客户端和服务器之间建立连接。 2. **Thread**:在Java中,多线程是并行执行任务的方式,可以提高程序的效率。在大文件下载或上传场景中,使用多线程可以同时...
本项目实现了基于Java Socket的多人聊天功能,包括群聊、私聊以及文本、图片和文件的发送与接收,提供了丰富的交互体验。 首先,我们要理解Socket的工作原理。Socket是网络通信的一种端点,它允许两个应用程序通过...
Java基于Socket实现局域网文件传输,此文件包含了Eclipse项目源码和已经打包好了的.jar文件(文件发送端和文件接收端)。 处在同一局域网内的两台主机,一台运行sender.jar文件(发送端),另一台运行receiver.jar...
在这个场景下,我们探讨的是如何使用Java Socket实现一个聊天功能,并且能够传递文件。在博客《Java Socket聊天之传文件》中,作者详细介绍了如何构建这样一个系统。 首先,我们需要理解Java Socket的基本概念。...
在这个简单的文件传输程序中,我们主要关注的是如何使用Socket进行文件的发送与接收。以下是对该程序可能涉及的关键知识点的详细解释: 1. **Socket基本概念**: - **Socket**:在计算机网络中,Socket像是一种...
在本示例中,我们将深入探讨如何使用Java Socket进行图片的传输,这对于理解网络编程和数据交换至关重要。"Java Socket传输图片源代码"这个主题涵盖了以下几个关键知识点: 1. **Java Socket基础**: - Socket是...
本项目“java-socket大文件上传-含客户端和服务端”旨在演示如何利用Java Socket API来实现大文件的上传功能,这对于网络应用如文件分享、云存储服务等至关重要。 首先,我们要理解Socket的工作原理。Socket是一种...
在这个示例中,我们将探讨如何利用Java的Socket API进行文件的发送与接收。以下是对"Java基于Socket文件传输示例:服务器端和客户端"的详细解释。 1. **Socket基础知识**: - Socket是网络通信中的一个概念,它...