`
吃猫的鱼
  • 浏览: 45484 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

Java网络聊天之文件传送

阅读更多

  这次带给大家的是Java Socket文件传送,给出核心代码:

  1.发送

 

class SendFile implements Runnable {
  public void run() {
   JFileChooser fc = new JFileChooser();
   int return_value = fc.showOpenDialog(b2);
   if (return_value == JFileChooser.APPROVE_OPTION) {
    File file = fc.getSelectedFile();
    try {
     PORT = getPort(t3.getText());
     serverIP = getIP();
     // 通过打开一个到实际文件的连接来创建一个 FileInputStream,该文件通过文件系统中的 File 对象
     // file 指定。
     FileInputStream fos = new FileInputStream(file);
     Socket socket = new Socket(serverIP, PORT);// 创建连接到指定服务器的套接字
     socket.setSoTimeout(20);
     DataOutputStream out = new DataOutputStream(socket.getOutputStream());
     out.writeUTF(file.getName());// 以与机器无关方式使用 UTF-8  修改版编码将一个字符串写入基础输出流。
     ta1.append("File " + file.getName() + " begins to send!\n");
     OutputStream netOut = socket.getOutputStream();
     // BufferedOutputStream,该类实现缓冲的输出流。通过设置这种输出流,应用程序就可以将各个字节写入基础输出流中,而不必为每次字节写入调用基础系统。
     OutputStream doc = new DataOutputStream(new BufferedOutputStream(netOut));
     byte[] buf = new byte[2048];
     // 从此输入流中将最多 buf.length 个字节的数据读入一个字节数组中。
     int num = fos.read(buf);
     if (num != (-1))
      ta1.append("File is sending...\n");
     while (num != (-1))// 是否读完文件
     {
      doc.write(buf, 0, num);// 将指定字节数组中从偏移量0 开始的 num个字节写入基础输出流。
      doc.flush();// 清空此数据输出流。
      num = fos.read(buf);// 继续从文件中读取数据
     }
     if (num == (-1))
      ta1.append("The file sending is over.\n");
     fos.close();
     netOut.close();
     Thread.sleep(500);
    } catch (Exception ex) {
    }
   }
  }
 }

  2.接收

class ReceiveFile implements Runnable {
		// static final int INPORT1 = 8888;//端口号
		public void run() {
			try {
				ServerSocket server;
				server = new ServerSocket(SERVERPORT);
				// 创建绑定到特定端口的服务器套接字。
				Socket sock;// 创建一个Socket对象。服务器端便可以利用这个Socket对象与客户进行通讯。
				while (true) {
					sock = server.accept();// 侦听并接受到此套接字的连接
					InetAddress addr = sock.getInetAddress();// 返回套接字连接的地址。
					System.out.println(addr.getHostAddress());

					// 使用指定的基础 InputStream 创建一个 DataInputStream。
					DataInputStream infilename = new DataInputStream(sock.getInputStream());
					// 从流infilename中读取用 UTF-8 修改版格式编码的 Unicode 字符格式的字符串;然后以String 形式返回此字符串。
					String filename = new String(infilename.readUTF());
					System.out.println("filename=" + filename);
					ta1.append("File" + filename + " is from" + addr.getHostAddress() + "\n");
					File file = new File("C:" + filename);// 创建一个File实例
					// 当且仅当不存在具有此抽象路径名指定的名称的文件时,原子地创建由此抽象路径名指定的一个新的空文件。
					file.createNewFile();
					// 创建从中读取和向其中写入(可选)的随机存取文件流,该文件由 File 参数指定。
					RandomAccessFile raf = new RandomAccessFile(file, "rw");
					InputStream netIn = sock.getInputStream();// 返回此套接字的输入流。
					// BufferedInputStream(netIn),创建 BufferedInputStream
					// 并保存其参数,以便将来使用。
					DataInputStream in = new DataInputStream(
							new BufferedInputStream(netIn));
					byte[] buf = new byte[2048];
					// 从所包含的输入流中读取一定数量的字节,并将它们存储到缓冲区数组 buf 中。
					int num = in.read(buf);
					if (num != (-1))
						ta1.append("File is sending...\n");
					while (num != (-1))// 是否读完所有数据
					{
						// 将 num 个字节从指定字节数组写入到此文件,并从偏移量 0处开始。
						raf.write(buf, 0, num);// 将数据写往文件
						// 尝试跳过输入的 num 个字节以丢弃跳过的字节。
						raf.skipBytes(num);// 顺序写文件字节
						num = in.read(buf);// 继续读取文件
					}
					if (num == (-1))
						ta1.append("The file has been saved to C disk" + "\n");
					in.close();
					raf.close();
				}
			} catch (Exception e) {
				System.out.println("receive error!");
			}
		}
	}

 

2
0
分享到:
评论

相关推荐

    JAVA局域网聊天与文件传送 含报告和源码

    “聊天文件传送”是指程序的主要功能,即提供聊天室功能,允许用户进行实时对话,以及文件的发送和接收。这涉及到网络编程中的多线程技术,可能有单独的线程处理聊天消息,另一些线程负责文件传输,以确保程序的响应...

    Java Socket聊天和文件传输工具

    在这个"Java Socket聊天和文件传输工具"中,开发者利用Socket API创建了一个实用的工具,能够实现用户间的文本聊天功能以及文件的传输。虽然源代码未提供,但我们可以根据已知的信息探讨其背后的原理和技术要点。 1...

    java局域网聊天室文字文件传输

    【标题】:“java局域网聊天室文字文件传输”揭示了使用Java编程语言构建的局域网内聊天应用,该应用不仅支持用户间的基本文字交流,还具备文件传输能力,进一步增强了通信的功能性。 【描述】:“用java写的局域网...

    Java Socket聊天和文件传输工具(更新)

    总的来说,这个Java Socket聊天和文件传输工具是一个很好的学习和实践案例,涵盖了网络编程、多线程、文件I/O等多个Java核心技术。无论是对初学者还是经验丰富的开发者来说,都能从中受益,提升自己的技能。通过深入...

    Java swing实现简单的C/S聊天及文件传输系统

    在这个项目中,"Java swing实现简单的C/S聊天及文件传输系统"是利用Swing构建一个客户端/服务器(Client/Server)架构的聊天和文件传输应用。这个系统允许用户通过网络进行文本聊天并交换文件。以下是关于这个项目的...

    局域网聊天和文件传输[Java源码]

    综上所述,这个“局域网聊天和文件传输[Java源码]”项目涵盖了Java桌面应用开发的多个关键方面,包括UI设计、网络通信、多线程处理和文件操作,为学习和理解这些核心技术提供了实践平台。通过深入研究这个项目,...

    Java 类QQ聊天及文件传输程序

    Java 类QQ聊天程序是基于Java编程语言开发的一款模拟QQ聊天功能的应用,同时也包含了文件传输的能力。这个项目旨在帮助学习者理解和应用Java在网络编程和多线程领域的知识。下面将详细阐述其中涉及的关键技术点。 1...

    java版局域网聊天文件传输

    【Java版局域网聊天文件传输】是一种使用Java编程语言实现的本地网络通信应用,它集成了文件传输和聊天功能,使得用户可以在同一局域网内的设备之间方便地分享文件和进行文字交流。这一技术主要涉及到以下几个核心...

    java聊天和文件传输实例

    用java的NIO技术编写的 ...2. 拖拽文件可以实现文件传输功能,也可以是文件夹 3. 启动时可以选择server端或client端启动 4. 本人原创,学习NIO和java的网络通信一定会不错 5. 下载下来可以直接导致eclipse,然后运行

    java 局域网聊天 ,文件传输 工具

    标题中的“Java 局域网聊天,文件传输工具”指的是一个使用Java编程语言开发的应用程序,该程序允许用户在局域网(LAN)环境中进行聊天并实现文件的传输。这通常涉及到网络编程,特别是利用Java的Socket API来创建...

    java聊天工具,传输文件

    Java聊天工具是一款基于Java编程语言开发的实时通讯应用,它具备多用户聊天和文件传输功能。在这款工具中,用户可以方便地与其他人进行文字、语音甚至视频交流,并且能够实时分享各种类型的文件,如文档、图片、音频...

    java实现的TCP聊天及文件传输功能

    java实现的TCP聊天及文件传输功能,欢迎大家使用

    java局域网聊天+文件传输系统

    java编的 只能告诉你能用 答辩可能给优秀 程序是不怎样啊 当时只看了几天java就编了 应付一下老师 里面有简单的注释 不懂的话没办法了 我也不懂了

    Java 聊天系统 Swing Socket 文件传输

    在本项目中,我们关注的是一个基于Java的B/S架构的...综上所述,这个Java聊天系统展示了如何结合Swing、Socket和B/S架构来构建一个功能完善的实时通讯应用,同时也涉及到文件传输、多线程和异常处理等核心编程概念。

    java socket 聊天之传文件

    Java Socket编程是网络编程中的重要一环,常用于实现...总的来说,Java Socket聊天并传输文件涉及了网络编程基础、Java IO、多线程等多个知识点,通过实践这样的项目,可以加深对这些概念的理解,并提升实际开发能力。

    Java局域网聊天传文件(类似QQ)源代码

    这个Java聊天系统的源代码是一个很好的学习资源,可以帮助开发者理解如何在Java环境中实现一个完整的网络应用程序,尤其是涉及文件传输的部分。通过研究源代码,开发者可以学习到网络编程、GUI设计、多线程处理以及...

    java简单聊天发送文件

    在Java编程语言中,实现一个简单的聊天应用并发送文件通常涉及到网络编程,特别是TCP(传输控制协议)和UDP(用户数据报协议)这两大数据传输协议。TCP是一种面向连接的、可靠的传输协议,而UDP则是无连接的、不可靠...

    java聊天系统 可以传送文件哈

    Java聊天系统是一个基于Java编程语言实现的实时通讯平台,它允许用户进行文本、语音甚至文件的传输。在本文中,我们将深入探讨Java聊天系统的核心概念、设计与实现,以及涉及的相关技术。 首先,Java聊天系统通常...

    Java版socket编程实现带语音聊天和文件传送功能

    3.实现了基本文件传送功能 4.实现了发送窗口抖动的功能 5.实现了语音聊天的功能(新增) 资源内容包括源程序和打包后的可执行jar文件,以及要用到的所有jar包; 代码保证可用,如有问题请留言,代码较规范,结构清晰...

    Java局域网聊天室和文件夹发送

    在这个Java聊天室中,TCP可能被用于保证聊天消息的可靠传输,而UDP则可能用于文件传输,因为它对速度有较高的要求。 在功能实现方面,群聊和私聊是聊天室的基本需求。群聊允许所有在线用户接收到同一消息,而私聊则...

Global site tag (gtag.js) - Google Analytics