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

Socket 发送文件

    博客分类:
  • java
阅读更多
服务端
package com.cotel.mina;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.text.DecimalFormat;
import java.util.Date;

public class TestServer {
	/**
	 * @ClassName: TestServer
	 * @Description: 服务端
	 * @author Yanghui
	 * @date 2010-5-13 上午11:25:08
	 * 
	 */
	public static void main(String[] agrs) {
		try {
			ServerSocket serverSocket = new ServerSocket(8899);
			while(true){
			Socket socket = serverSocket.accept();
			System.out.println("客户端发送信息>>>>>");
			DataInputStream inputStream = new DataInputStream(socket.getInputStream());
			DataOutputStream outputStream=new DataOutputStream(socket.getOutputStream());
			String result = inputStream.readUTF();
			System.out.println("读取客户端数据:" + result);
			System.out.println("返回信息给客户端成功>>>>>");
			outputStream.writeUTF("已经收到信息");
			byte[] b=new byte[1000000];
			StringBuffer saveFile=new StringBuffer("E:\\");
			saveFile.append(inputStream.readUTF());
			File file=new File(saveFile.toString());
			FileOutputStream fileOutputStream=new FileOutputStream(file);
			System.out.println("收到文件,正在下载文件>>>>>");
			long length=inputStream.readLong();
			DecimalFormat format=new DecimalFormat("###,##0");
			format.setMinimumFractionDigits(2);
			double stat=new Date().getTime();
			while(true)
			{
				int read=	inputStream.read(b);
				if(read==-1)
				{
					break;
				}
				fileOutputStream.write(b,0,read);
				System.out.println("已经接收:"+format.format(((double)file.length()/length)*100)+"%");
			}
			double end=new Date().getTime();
			System.out.println("消耗时间:"+(end-stat)/1000);
			System.out.println("接受文件完成>>>>");
		
			fileOutputStream.flush();
			fileOutputStream.close();
			outputStream.flush();
			outputStream.close();
			inputStream.close();
			socket.close();
			}
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

客户端
package com.cotel.mina;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;

/**  
 * @ClassName: TestClient  
 * @Description: 客户端 
 * @author Yanghui  
 * @date 2010-5-13 上午11:30:30  
 *   
 */

public class TestClient {


	public static void main(String[] args) {
	try {
		System.out.println("请求连接服务器......");
		Socket socket=new Socket("localhost", 8899);
		System.out.println("连接服务器成功>>>>>");
		DataOutputStream outputStream=new DataOutputStream(socket.getOutputStream());
		DataInputStream inputStream=new DataInputStream(socket.getInputStream());
		System.out.println("向服务器发送信息......");
		outputStream.writeUTF("我最近还不错");
	
		System.out.println("向服务器发送信息成功>>>>>");
		
		System.out.println("接受服务器返回信息>>>>");
		System.out.println("返回信息:"+inputStream.readUTF());
		System.out.println("请求发送文件>>>>>>");
		File file=new File("F:\\书.rar");
		System.out.println("文件总长度:"+file.length());
		byte[] b=new byte[1000000];
		FileInputStream fileInputStream=new FileInputStream(file);
		outputStream.writeUTF(file.getName());
		outputStream.writeLong(file.length());
		while(true)
		{
		//返回读入的字节长度,其实就是b数组的长度
		int read=fileInputStream.read(b);
		//都完以后返回-1
		if(read==-1)
		{
			break;
		}
		//将指定字节数组中从偏移量 0 开始的 read 个字节写入基础输出流。
		outputStream.write(b,0,read);
		}

		System.out.println("发送完成>>>>>");
	
		outputStream.flush();
		outputStream.close();
		inputStream.close();
		socket.close();
	} catch (UnknownHostException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	} catch (IOException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}

	}

}
分享到:
评论

相关推荐

    SOCKET传送文件(c++编写)

    ### SOCKET传送文件(c++编写) #### 概述 本篇文档主要介绍了一个基于C++语言实现的简单网络文件传输程序。该程序分为两部分:服务器端与客户端,通过使用Socket编程技术完成文件的发送与接收。在此基础上,本文...

    Qt socket传送文件

    本篇文章将详细讲解如何利用Qt的socket功能进行文件传输,以"Qt socket传送文件"为主题,结合提供的标签"Qt socket",我们将探讨Qt中的网络编程及其在Windows CE(Wince)环境下运行的实现方法。 首先,Qt的网络...

    通过Socket传送文件的例子

    标题中的“通过Socket传送文件的例子”表明我们将探讨的是如何利用Socket编程在计算机网络间传输文件。Socket是网络通信的一种基础接口,它允许两台设备(通常是一个客户端和一个服务器)进行双向通信。在这个例子中...

    socket传送文件,C#

    首先,我们从标题"socket传送文件,C#"出发,理解其核心概念。Socket,也被称为套接字,是网络编程中的一个抽象概念,它允许程序通过网络发送和接收数据。在C#中,我们通常使用TcpClient和TcpListener类来创建客户端...

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

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

    VC socket 发送文件

    总的来说,VC Socket发送文件涉及了网络通信的基本流程,包括Socket的创建、连接、数据传输以及资源的关闭。理解并掌握这些知识点对于进行网络编程,尤其是文件传输是非常重要的。在实际应用中,还需要考虑到错误...

    C# Socket 发送接收文件,消息

    每当有新连接时,创建一个新的Socket实例来处理这个特定的客户端,并通过这个新的Socket发送文件。 6. **项目结构**: 压缩包中的文件名im.sln可能是项目的解决方案文件,包含对整个工程的管理信息。imserver和...

    android使用socket上传、下载文件

    Socket提供了一种可靠的、基于连接的传输层通信机制,适用于文件的上传和下载。本篇将详细讲解如何在Android应用中使用Socket进行文件的上传和下载操作。 首先,理解Socket的基本概念:Socket是应用程序与网络协议...

    Socket 通信及其发送文件

    三、Socket发送文件 1. 文件读取:在发送文件前,我们需要将文件内容读取到内存中。C#提供了FileStream类用于读写文件,可以使用Read方法按字节读取文件内容。 2. 数据分块:由于Socket一次只能发送有限大小的数据...

    用socket传送文件以及接收文件

    本文将深入讲解如何使用C#语言通过Socket进行文件的发送与接收,同时结合提供的"SocketServer"和"SocketClient"两个文件来解析相关知识点。 首先,Socket在计算机网络中是一种基于TCP/IP协议族的通信方式,它允许...

    C# socket发送(接收)文件

    本文将详细讲解如何使用C#的Socket类进行文件的发送与接收,主要围绕`SingleSendForm`和`MultiSendForm`两个程序实例展开。 首先,Socket在C#中是System.Net.Sockets命名空间下的类,它提供了在网络中进行数据传输...

    Socket传输文件示例

    1. **计算文件长度**:在文件发送前,首先获取文件的总长度(`uiLength`),并将其通过Socket发送给接收端。这样接收端就可以知道预期接收的文件大小。 ```cpp UINT uiLength = file.GetLength(); sockSend....

    python:socket传输大文件示例

    - 客户端:创建Socket,连接到服务器端指定的IP和端口,然后发送文件信息(如文件名和大小)。 - 数据传输:服务器接收文件信息,打开接收文件,然后按一定大小(如102400字节)接收和写入数据,直到文件传输完成...

    socket编程c语言发送文件

    本示例涉及的是如何使用C语言通过socket接口来发送文件。以下将详细阐述相关知识点: 1. **Socket概念**:Socket是网络编程中的一个抽象概念,它代表了一个端点,用于在两个程序之间建立通信连接。在C语言中,我们...

    Socket通信 能够发送文件,实体类,字符串等多种发送方式

    在Java中,Socket通信基于TCP/IP协议栈,提供了稳定的数据传输能力,能够支持多种数据类型如文件、实体类和字符串的发送。本节将深入探讨Socket通信的工作原理、如何发送不同类型的 data以及其在实际项目中的应用。 ...

    socket服务端和客户端互相发送消息、文件

    至于压缩包子文件的文件名称列表"Socket服务端向客户端发送",我们可以推测这个压缩包可能包含了服务端向客户端发送文件的示例代码。这通常涉及到服务端先读取文件内容,然后通过Socket的输出流将内容分块发送,...

    c# socket 传输文件

    在本文中,我们将深入探讨如何使用C# Socket类进行文件传输,包括文件的发送和接收,以及在此过程中可能遇到的关键技术和注意事项。 1. **Socket基本概念** - Socket是基于TCP/IP协议族的通信接口,它允许应用程序...

    两种SOCKET文件传输实例

    本主题将深入探讨两种基于SOCKET的文件传输实例,这些实例提供了详细注释的代码,有助于理解如何通过网络进行文件交换。 首先,我们要了解什么是SOCKET。SOCKET是操作系统提供的接口,它允许应用程序通过网络发送和...

Global site tag (gtag.js) - Google Analytics