`

用java.net.Socket实现点对点的文件传输

    博客分类:
  • J2SE
阅读更多
转载:http://hi.baidu.com/triceratops/blog
Server端代码(支持多个客户端同时访问,端口号为516):

=================================================

import java.net.*;
import java.io.*;
import java.util.*;

public class Server extends Thread{
private ServerSocket serverSocket;
private Socket serverEndPoint;
private InputStream in;
private OutputStream out;

public Server(){
  
}

private Server(Socket serverEndPoint){
   this.serverEndPoint = serverEndPoint; 
}

public void startService(int port) throws IOException,InterruptedException{
    System.out.println("service started...");
    serverSocket = new ServerSocket(port);
    while (true)
     new Server(serverSocket.accept()).start();
} 
public void run(){
   try{
    in = serverEndPoint.getInputStream();
    out = serverEndPoint.getOutputStream();
   
    DataInputStream dis = new DataInputStream(in);
    DataOutputStream dos = new DataOutputStream(out);
   
      String request;
    while(true){
     if((request = dis.readUTF())!=null){
      if(request.trim().equals("bye")||
      request.trim().equals("exit")||
      request.trim().equals("quit"))
       break;
      System.out.println(serverEndPoint.getInetAddress().getCanonicalHostName() + " is getting '" + request.trim()+"'......");   
      File f = new File(request.trim());
      if(!f.exists()){
       dos.writeBoolean(false);
       dos.writeUTF("File '"+f.getPath()+"' doesn't exist!");
       continue;
      }
      if(f.isDirectory()){
       dos.writeBoolean(false);
       dos.writeUTF("'"+f.getPath()+"' is a folder!");
       continue;
      }
      FileInputStream fis = new FileInputStream(f);
      int i;
      int count = 0;
      byte[] buf = new byte[1024];
      dos.writeBoolean(true);
      dos.writeLong(f.length());
      
        while((i=fis.read(buf))!=-1) {
            dos.write(buf, 0, i);
            count+=i;
        }
        fis.close();
        Thread.sleep(1000);
        dos.writeUTF("File '"+f.getName()+"' has been saved in the current folder.");
        
     }
    }
   
    System.out.println("Connection to "+serverEndPoint.getInetAddress().getCanonicalHostName()+" is ready to close......");
    Thread.sleep(5000);
    dis.close();
    dos.close();
    serverEndPoint.close();
   }
   catch(Exception e){
    e.printStackTrace(); 
   } 
} 

public static void main(String[] args){
   try{
    new Server().startService(516); 
   }
   catch(Exception e){
    e.printStackTrace(); 
   } 
}
}

=================================================


Client端代码:

=================================================

import java.net.*;
import java.io.*;

public class Client{
private Socket clientEndPoint;
private InputStream in;
private OutputStream out;

public void connectToService()throws IOException,InterruptedException{
    clientEndPoint = new Socket("192.168.4.60",516);
    in = clientEndPoint.getInputStream();
    out = clientEndPoint.getOutputStream();
    DataInputStream dis = new DataInputStream(in);
    DataOutputStream dos = new DataOutputStream(out);
   
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    System.out.println("Server is ready. Please type in file to get: ");
    String request;
    while(true){
     System.out.print("Get: ");
     request = br.readLine()+"\r\n";
     dos.writeUTF(request);
     if(request.trim().equals("bye")||
      request.trim().equals("exit")||
      request.trim().equals("quit"))
       break; 
     while(true){
      if(in!=null){
          System.out.println("Getting file(s)......");
          int i;
          long count = 0;
          boolean fileExist = dis.readBoolean();
          if(fileExist){
           File f = getTargetFile(request.trim());
        FileOutputStream fos = new FileOutputStream(f);
           long fileLength = dis.readLong();
           byte[] buf = new byte[1024];
          System.out.println(fileLength);
           while(true) {
            i = dis.read(buf,0,1024);
              fos.write(buf, 0, i);
              count+=i;
            
              if(count >= fileLength){
               break;
              }
           }
           fos.close();
       } 
       break;
      }
     }
     System.out.println(dis.readUTF());
    }
   
    System.out.println("Client ready to close......");
    Thread.sleep(5000);
    dis.close();
    dos.close();
    clientEndPoint.close();
} 

private File getTargetFile(String path) {
   path = path.replace("/","\\"); 
   path = path.substring(path.lastIndexOf("\\")+1);
   return new File(path);
}

public static void main(String[] args){
   try{
    new Client().connectToService(); 
   } 
   catch(Exception e){
    e.printStackTrace(); 
   }
}
}


分享到:
评论
1 楼 mytream 2011-09-17  
局域网聊天工具的文件传输功能是这么实现的么??

相关推荐

    java和.net的socket通信

    10. **安全性**:考虑到网络安全,可以使用SSL/TLS协议对Socket通信进行加密,保证数据的安全传输。Java和.NET都提供了相应的API支持。 示例代码: 在Java中,简单的Server端代码如下: ```java import java.net....

    java socket实现的点对点文件传输

    Java Socket实现的点对点(P2P)文件传输是一个涉及网络编程、Java I/O以及多线程的重要技术。在Java中,Socket是基于TCP协议的网络通信接口,提供了两台计算机之间稳定的数据交换能力。P2P网络,即对等网络,允许...

    java socket长连接客户端服务端(标准实例)

    在Java中,通过`java.net.Socket`类来表示客户端,`java.net.ServerSocket`类来表示服务器端。本案例实现了基于TCP协议的Socket长连接,即客户端和服务端建立连接后,保持连接状态,进行多次数据交互而无需频繁建立...

    JAVA Socket编程实现文件上传

    以上就是使用Java Socket编程实现文件上传涉及到的主要知识点,包括Socket通信机制、文件I/O、数据库操作、异常处理、多线程、安全性和性能优化等方面。理解并掌握这些内容,对于开发高效、可靠的文件上传系统至关...

    Java Socket实现简单点对点聊天软件

    Java Socket实现的简单点对点聊天软件是一种基于网络通信的C/S(客户端/服务器)架构的应用。在这个系统中,服务器端作为一个中央节点,接收并转发客户端之间的消息,而客户端则负责用户交互,发送和接收聊天内容。...

    用JAVA写的socket点对点聊天程序

    总的来说,这个用Java编写的TCP Socket点对点聊天程序是一个很好的学习资源,涵盖了网络编程基础、并发处理和异常处理等多个重要知识点。通过实际操作,学习者不仅可以掌握TCP通信的原理,还能提高Java编程技巧,为...

    Java Socket常见异常处理

    3. **java.net.SocketException: Socket is closed** 当Socket主动关闭后,尝试进行读写操作时,会出现这个异常。为避免此类问题,确保在完成通信后正确关闭Socket,并在处理Socket对象时检查其状态。 4. **java...

    java工具类 ftp 文件比较 socket http

    在Java中,我们可以使用`java.io`和`java.nio`包下的类来实现文件的比较。例如,`java.io.File`类可以获取文件的基本信息,通过比较文件大小和修改时间进行初步判断。对于内容比较,可以使用`java.nio.file.Files`...

    java语言实现的局域网点对点文件传输

    在点对点传输中,这些类用于读取发送端的文件并写入接收端。 4. **多线程**: 为了实现并发的文件传输,Java的`Thread`类和`Runnable`接口非常关键。每个文件传输可以作为一个独立的线程运行,这样可以同时处理多...

    JAVA文件传输(文档+源代码).zip

    这个"JAVA文件传输(文档+源代码).zip"压缩包很可能是为了教学或实践目的,包含了相关的文档和源代码,帮助学习者理解如何在Java环境中实现文件的上传和下载功能。以下是基于这一主题的详细知识点: 1. **Java I/O流...

    java文件传输,基于tcp/ip的文件传输

    // 读取文件并写入输出流,实现文件传输 } catch (IOException e) { e.printStackTrace(); } finally { try { socket.close(); // 关闭连接 } catch (IOException e) { e.printStackTrace(); } } } } } ...

    java程序设计之网络编程学习课件

    1. **Socket编程**:Java提供了`java.net.Socket`和`java.net.ServerSocket`类来实现基于TCP协议的网络通信。Socket是网络通信的基本单元,ServerSocket用于监听客户端的连接请求,而Socket则用于建立客户端和服务器...

    用Java Socket实现一个简单的基于P2P范型的即时聊天系统。

    在Java中,`java.net.Socket`和`java.net.ServerSocket`类是实现这一功能的核心。`ServerSocket`用于监听客户端的连接请求,而`Socket`则用于建立实际的连接并进行数据传输。 1. **点对点单人聊天**:在P2P系统中,...

    Java程序设计(雍俊海)ch12

    Java的`java.net.Socket`和`java.net.ServerSocket`类提供了基于TCP的网络通信功能。客户端通过`Socket`类建立到服务器的连接,服务器端则通过`ServerSocket`监听并接受连接请求。 3. 基于UDP的网络程序设计:UDP...

    Socket_TCP_UDP.rar_java socket tcp udp_java socket 协议_java tcp u

    在Java中,`java.net.Socket`类和`java.net.ServerSocket`类用于实现TCP Socket编程。`Socket`类用于客户端,创建连接到服务器的套接字;`ServerSocket`类用于服务器端,监听并接受来自客户端的连接请求。 接下来,...

    java网络编程实例.rar

    9. **FTP和SMTP**:Java还提供了`java.net`包下的`FTPClient`和`SMTPClient`接口,用于FTP文件传输和电子邮件发送。 10. **网络安全**:Java安全模型提供了处理网络安全问题的框架,如SSL/TLS加密、数字证书、权限...

    Java 套接字(Socket)实现的简单局域网点对点聊天工具

    在局域网环境中,用户可以通过输入对方的IP地址,实现点对点的聊天。由于局域网内的设备可以互相访问,因此这种通信方式在本地网络中尤为适用。 总结来说,这个Java套接字聊天工具展示了如何利用Java的网络编程API...

    java Socket Thread IO 大文件下载上传整合

    在Java中,`java.net.Socket`类和`ServerSocket`类是实现Socket通信的核心。Socket允许应用程序通过TCP/IP协议发送和接收数据,为客户端和服务器之间建立连接。 2. **Thread**:在Java中,多线程是并行执行任务的...

    java socket 聊天之传文件

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

    socket 文件传输源码

    在这个“Socket文件传输源码”中,我们很显然会看到如何使用Java的Socket类来实现在两个应用程序之间传输文件。以下是对这个主题的详细说明: 首先,我们要了解Socket的基本概念。Socket在计算机网络中扮演着桥梁的...

Global site tag (gtag.js) - Google Analytics