`
raymond.chen
  • 浏览: 1441240 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

通过Socket传送文件的例子

阅读更多
一、表示Socket服务端的类:Server.java
public class Server extends Thread{
	public static int port = 6789;
	public static String host = "10.60.1.127";
	private static ServerSocket server = null;
	
	public void run() {
		if(server == null){
			try{
				//1、新建ServerSocket实例
				server = new ServerSocket(port);
			}catch(IOException e){
				e.printStackTrace();
			}
		}
		
		System.out.println("服务器启动...");
		while(true){
			try{
				//2、访问ServerSocket实例的accept方法取得一个客户端Socket对象
				Socket client = server.accept();
				if(client == null) continue;
				
				new SocketConnection(client, "D:\\").start();
				
			}catch(IOException ex){
				ex.printStackTrace();
			}
		}
	}

	public static void main(String[] args) {
		new Server().start();
	}
	
}

Socket客户端处理类:SocketConnection.java
public class SocketConnection extends Thread{
	private Socket client;
	private String filepath;
	
	public SocketConnection(Socket client, String filepath){
		this.client = client;
		this.filepath = filepath;
	}
	
	public void run(){
		if(client == null) return;
		
		DataInputStream in = null;
		DataOutputStream writer = null;
		
		try{
			//3、访问Socket对象的getInputStream方法取得客户端发送过来的数据流
			in = new DataInputStream(new BufferedInputStream(client.getInputStream()));
			
			String fileName = in.readUTF(); //取得附带的文件名
			
			if(filepath.endsWith("/") == false && filepath.endsWith("\\") == false){
				filepath += "\\";
			}
			filepath += fileName;
			
			//4、将数据流写到文件中
			writer = new DataOutputStream(new BufferedOutputStream(new BufferedOutputStream(new FileOutputStream(new File(filepath)))));
			
			int bufferSize = 2048;
            byte[] buf = new byte[bufferSize];
            
			int read = 0;
			while((read=in.read(buf)) != -1){
				writer.write(buf, 0, read);
			}
			
			writer.flush();
			System.out.println("数据接收完毕");
			
		}catch(IOException ex){
			ex.printStackTrace();
		}finally{
			try{
				in.close();
				writer.close();
				client.close();
			}catch(IOException e){
				e.printStackTrace();
			}
		}
		
	}
	
}

二、表示客户端的类:Client.java
public class Client {
	private Socket client;
	private boolean connected;
	
	public boolean isConnected() {
		return connected;
	}

	public void setConnected(boolean connected) {
		this.connected = connected;
	}

	public Client(String host, int port){
		try {
			//1、新建Socket对象
			client = new Socket(host, port);
			System.out.println("服务器连接成功!");
			
			this.connected = true;
			
		} catch (UnknownHostException e) {
			this.connected = false;
			close();
		} catch (IOException e) {
			System.out.println("服务器连接失败!");
			this.connected = false;
			close();
		}
	}
	
	/**
	 * 将文件内容发送出去
	 * 
	 * @param filepath 文件的全路径名
	 */
	public void sendFile(String filepath){
		DataOutputStream out = null;
		DataInputStream reader = null;
		try{
			if(client == null) return;

			File file = new File(filepath);
			reader = new DataInputStream(new BufferedInputStream(new FileInputStream(file)));
			
			//2、将文件内容写到Socket的输出流中
			out = new DataOutputStream(client.getOutputStream());
			
			out.writeUTF(file.getName()); //附带文件名
			
			int bufferSize = 2048; //2K
            byte[] buf = new byte[bufferSize];
            
			int read = 0;
			while((read=reader.read(buf)) != -1){
				out.write(buf, 0, read);
			}
			
			out.flush();
			
		}catch(IOException ex){
			ex.printStackTrace();
			close();
		}finally{
			try {
				reader.close();
				out.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
	
	/**
	 * 关闭Socket
	 */
	public void close(){
		if(client != null){
			try {
				client.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
	
	public static void main(String[] args) {
		Client client = new Client(Server.host, Server.port);
		if(client.isConnected()){
			client.sendFile("E:\\EKI.txt");
			client.close();
		}
	}
	
}
0
0
分享到:
评论
2 楼 hhb19900618 2011-08-12  
1 楼 damiao_cn 2008-08-11  
感谢,让我这个初学者受益匪浅

相关推荐

    C#Socket文件传输简单例子(将文件名和文件同时传输)

    - **安全性**:如果是在不安全的网络环境中传输文件,应考虑使用SSL/TLS等加密机制保证数据的安全性。 - **文件分块**:对于大文件,可能需要分块传输,每次发送一小部分,以避免内存溢出。 在压缩包中的`Socket...

    socket传输文件例子demo

    总之,这个"socket传输文件例子demo"是一个实践性的学习资源,可以帮助开发者深入理解如何在VC++环境中利用Socket进行文件传输,同时也可以作为开发自己网络通信软件的基础。通过阅读和分析源代码,我们可以学习到...

    delphi使用socket通讯例子-文件传输

    通过以上步骤,你可以在Delphi中实现一个基本的文件传输系统,而文件名称列表(socket)可能代表了实际项目中多个文件的传输需求。在实际应用中,你可能需要对这个基础进行扩展,例如支持多文件传输、进度显示、断点...

    C#语言Socket传文件例子

    这个“C#语言Socket传文件例子”提供了学习Socket通信和文件传输的实践平台。通过理解和实践这个例子,开发者可以掌握Socket编程的基本技巧,为进一步开发复杂的网络应用打下基础。在实际项目中,还可以考虑增加断点...

    VC socket传送文件的例子(转载)

    标题"VC socket传送文件的例子(转载)"揭示了我们将讨论如何使用Visual C++(简称VC)通过Socket接口来实现文件的发送与接收。 首先,Socket是网络编程的基本组件,它提供了进程间通信(IPC)的接口,使得运行在...

    socket文件传输(TCP)源码实例

    在这个“socket文件传输(TCP)源码实例”中,我们将深入理解如何利用TCP协议通过socket进行文件传输。TCP(Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议,确保了数据的...

    关于C语言 socket数据 文件传输的例子

    这里我们将重点讨论使用TCP协议的SOCK_STREAM,因为它是传输文件的理想选择,因为它提供了一种可靠的数据传输机制。 创建socket的第一步是调用socket()函数,该函数返回一个socket描述符,它是后续操作的基础。然后...

    socket传输文件实例

    总结,Socket传输文件实例涉及到网络通信基础、Socket编程、文件操作以及错误处理等多个方面,通过理解这些知识点,我们可以构建自己的文件传输系统,实现两台计算机之间的文件共享。在实践中,我们应根据具体需求...

    Socket编程简单例子

    在Android应用开发中,Socket通信常用于实现即时通讯、文件传输等功能,例如聊天应用、在线游戏等。 总结一下,这个“Socket编程简单例子”涵盖了以下知识点: 1. Socket的基本原理和作用 2. 在Android客户端创建...

    一个使用socket实现文件传输的例子

    通过以上步骤和注意事项,我们可以构建一个基本的Socket文件传输系统。这个系统虽然简单,但足以展示Socket编程的基本原理和文件传输的核心逻辑。在实际项目中,可以根据需求进一步扩展和优化,例如添加身份验证、...

    Java基于Socket文件传输示例:服务器端和客户端

    服务器端的核心是监听特定端口(在这个例子中是8821)上的连接请求,并在接收到连接后传输文件。以下是关键步骤: 1. **创建ServerSocket**:`ServerSocket ss = new ServerSocket(port);` 这行代码初始化了一个...

    socket传文件例子.txt

    在IT领域,尤其是在网络编程中,使用socket进行文件传输是一个常见的需求。...以上就是通过socket进行文件传输的主要步骤,涉及到socket的创建、绑定、监听、接受连接、数据收发以及文件传输等关键环节。

    TCP.rar_TCP 传输_TCP 文件传输_socket+文件传输_tcp文件传输_文件传输 C

    描述中的"socket 文件传输,基于TCP的文件传输,是个不错的例子"进一步强调了: 1. **Socket文件传输**:通过socket接口,开发者可以直接控制TCP连接,实现文件的发送和接收,这对于跨网络的文件共享和备份尤其有用...

    Socket编程例子

    Socket编程是计算机网络通信中的重要概念,主要用于实现进程间的网络通信。在本示例中,我们探讨的是如何使用...通过"TestSocket"这个例子,你可以更深入地学习如何在实际项目中运用Socket,从而实现跨网络的高效通信。

    文件传输源代码实例(Socket)

    这个是我自己编写的网络传输,主要可以传输文件和信息(支持多文件多用户传输)。用C#编写,使用了Socket。包含了一个传输类,一个数据库连接类。是学习网络传输的好帮手。(完整源代码,采用VS2005编写)绝对可以...

    HPSocket高效传输,自动分包组包

    开源一份HPSocket的tcp的高效传输方案,自动组包分包,我精简了HPSocket4C.dll文件删除了所有的代理,http,udp等等一大堆的东西,dll文件又经过upx压缩仅80kb大小,只保留tcp pack部分。pack本来就是可靠传输,一般...

    SOCKET 文件传输

    这个例子展示了如何创建Socket,发送文件和接收文件的基本流程。请注意,这只是一个基础示例,实际应用中需要考虑更多的细节,如异常处理、超时设置、多线程处理等。 至于“工具”,在进行Socket文件传输时,可能会...

Global site tag (gtag.js) - Google Analytics