不久前实现了java的多人聊天室,通过多线程实现了多个客户端之间互相收发其他人的消息。
而文件的传输的原理大体上与聊天的原理差不多,通过socket建立客户端与服务器端的连接,客户端可以发送请求,服务器端处理请求。
工作原理大概如下:
客户端:
1.在本地选取要传输的文件
2.通过socket建立与服务器端的连接
3.建立输出流将数据打包
4.将文件写入数据包并传到网络
服务器端:
1.建立新文件等待文件的传输
2.通过socket连接客户端
3.接受网络中的数据包并进行解析
4.将数据写入文件接收完毕
之前写了一个文件传输debug的时候没有问题,可是文件从服务器端一直接收不到传来的文件。后来在网上看了一下别人的代码,发现了一个没用过的函数RandomAccessFile(File file, String mode),看了一下jdk,用法是创建从中读取和向其中写入(可选)的随机访问文件流,该文件由File参数指定。也还是没怎么看懂,不过顺手用了一下。代码如下:
客户端:
package 传文件; import java.io.BufferedOutputStream; import java.io.DataOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.InetAddress; import java.net.ServerSocket; import java.net.Socket; import 服务器v1.ChatThread; public class SocketClient { private Socket client; public static void main(String[] args){ SocketClient sc= new SocketClient(); sc.connectSocketServer(9527); sc.sendFile("2.jpg"); } public void connectSocketServer(int port) { try { ServerSocket server= new ServerSocket(port); client= server.accept(); } catch (Exception e) { e.printStackTrace(); } } //发送文件 public void sendFile(String str) { byte[] b=new byte[1024]; File f = new File(str); try { //数据输出流 OutputStream dout = new DataOutputStream(new BufferedOutputStream(client.getOutputStream()));//文件读入流 InputStream ins=new FileInputStream(f); int n = ins.read(b); while (n != -1) { //向网络中写入数据 dout.write(b); //发送文件内容 dout.flush(); //再次读取n字节 n = ins.read(b); } //关闭流 ins.close(); dout.close(); } catch (IOException e) { e.printStackTrace(); } } }
服务器端:
package 传文件; import java.net.*; import java.io.*; /** * Socketserver从客户端读取文件并保存为本地文件! * * */ public class Socketserver { private Socket s; public static void main(String[] args) { Socketserver sk = new Socketserver(); sk.initServer(9527); sk.getFile(); } /** * 初始化服务器端 * @param port * 服务器端要使用的端口 */ public void initServer(int port){ try { s = new Socket(InetAddress.getLocalHost(),9527); //连接到服务器端 } catch (IOException e) { e.printStackTrace(); } } // 从SocketClient读取文件 public void getFile() { byte[] b=new byte[1024]; try { //定义输入流, InputStream in = s.getInputStream(); DataInputStream din = new DataInputStream(new BufferedInputStream(in)); //创建要保存的文件 File f = new File("copy.jpg"); RandomAccessFile fw = new RandomAccessFile(f, "rw"); int num = din.read(b); while (num != -1) { //向文件中写入0~num个字节 fw.write(b, 0, num); //跳过num个字节再次写入文件 fw.skipBytes(num); //读取num个字节 num = din.read(b); } //关闭输入,输出流 din.close(); fw.close(); } catch (Exception e) { e.printStackTrace(); } } }
,现在只是简单的实现了一个文件传输的功能,还未能实现界面以及对客户端间的文件传输,后面的功能会慢慢完善,会把聊天功能整合在一起。
相关推荐
在这个"Java socket文件传输实例"中,我们将深入探讨如何使用Java的Socket类进行文件的发送和接收,这对于理解网络编程的基本原理以及在实际应用中构建文件共享系统至关重要。 首先,Java Socket是基于TCP/IP协议的...
3. **字节流传输**:由于文件可能是任意字节的组合,因此文件传输通常使用字节流。Socket提供InputStream和OutputStream,它们都是基于字节的。客户端可以将FileInputStream中的字节流通过Socket的OutputStream传递...
在实际应用中,Java Socket文件传输可能涉及更复杂的逻辑,如多线程处理多个客户端连接,或者使用高级协议如FTP、HTTP进行更高效的文件传输。然而,基础的Socket通信机制是理解这些高级协议的关键。通过这个简单的...
Java Socket 文件传输小案例
Java Socket 大文件传输是网络编程中的一个关键领域,它涉及到高效的数据传输、包的分片与组装,以及网络协议的选择。在这个场景下,我们通常会用到TCP和UDP这两种传输层协议,以及Java的非阻塞I/O(NIO)技术。下面...
在这个主题中,我们将深入探讨Java中的Socket文件传输编程以及多线程的应用。 首先,理解Socket的基本概念至关重要。Socket可以看作是网络上的端点,允许两个应用程序通过网络进行通信。在Java中,`java.net.Socket...
在这个示例中,我们将探讨如何使用Java的Socket实现文件传输,包括服务器端和客户端的实现细节。 首先,我们从服务器端开始。服务器端的核心是监听特定端口(在这个例子中是8821)上的连接请求,并在接收到连接后...
总的来说,这个简单的文件传输程序利用了Java Socket API实现了客户端和服务器之间的文件交换,虽然它可能没有涵盖高级特性,如断点续传、错误恢复或性能优化,但对于理解和学习Socket编程基础是很有帮助的。...
在这个“Java Socket聊天和文件传输工具”中,开发者结合了实时聊天和文件传输的功能,使得用户可以在进行文字交流的同时,无缝地进行文件的交换。这个工具在局域网环境中已经过初步测试,表明其稳定性和效率都达到...
Java基于Socket文件传输示例Java基于Socket文件传输示例Java基于Socket文件传输示例
Java基于Socket实现局域网文件传输,此文件包含了Eclipse项目源码和已经打包好了的.jar文件(文件发送端和文件接收端)。 处在同一局域网内的两台主机,一台运行sender.jar文件(发送端),另一台运行receiver.jar...
总的来说,Java Socket文件传输是一种基础但实用的网络通信技术,通过它可以实现不同设备间的数据交换,为各种网络应用提供了可能,例如文件共享、在线聊天、远程控制等。理解和掌握这一技术对于Java开发者来说至关...
基于java nio socket 的文件传输例程
总结,Java Socket提供了一种强大且灵活的方式来进行文件传输。通过理解Socket的基本概念,结合文件流操作,我们可以构建出高效、安全的文件传输系统。在实际应用中,还需要考虑网络环境、错误处理、安全性等多个...
这个"Java基于Socket文件传输示例:服务器端和客户端"的文档很可能会详细讲解以上步骤,并提供实际的代码示例,帮助读者理解如何在Java中实现Socket文件传输。通过实践这样的示例,开发者可以深入理解网络编程的基本...
在这个"Java Socket聊天和文件传输工具"中,开发者利用Socket API创建了一个实用的工具,能够实现用户间的文本聊天功能以及文件的传输。虽然源代码未提供,但我们可以根据已知的信息探讨其背后的原理和技术要点。 1...
在本示例中,我们将深入探讨如何使用Java Socket进行图片的传输,这对于理解网络编程和数据交换至关重要。"Java Socket传输图片源代码"这个主题涵盖了以下几个关键知识点: 1. **Java Socket基础**: - Socket是...
Java Socket技术在Android开发中广泛应用于网络通信,尤其是在文件传输方面。断点续传功能是文件传输中的一个重要特性,它允许在文件传输中断后从上次中断的位置继续传输,避免了因网络问题导致的文件传输失败而需...
- 在文件传输过程中,Java的I/O流是关键。文件输入流用于读取本地文件,而文件输出流则用于将数据写入目标文件。在Socket通信中,我们通常会将文件内容封装成字节流,然后通过Socket发送。 4. **套接字输入/输出流...