具体需求是这样的:
server1有个文件x.war,server2发起一个http请求到服务器端server1下载文件x.war,具体的请求是http://server1/downloadservlet,然后这个请求会返回文件x.war,server2接到返回结果后直接把把该文件保存到目录c:/bak下。
在服务端起个socket监听,客户端链接,然后下载
以下例子是客户端将服务器上存放在d:\mp4\test.mp4保存到本地d:\test2.dat
但服务器只能处理单个请求,可以自己试试将它改成多线程支持,练习下下
package socket;
import java.io.*;
import java.net.*;
public class DataServer {
/**
* @param args
*/
public static final int SERVICE_PORT=1500;
public static final int DATA_SIZE=1024*30;
public static void main(String[] args) {
// TODO Auto-generated method stub
String filePath="d:"+File.separator+"MP4"+File.separator+"test.MP4";
File fileOut=new File(filePath);
if(!fileOut.exists()){
System.out.println("File Not Found");
return;
}
try{
ServerSocket server = new ServerSocket(SERVICE_PORT);
System.out.println("Service started");
for(;;){
Socket nextClient = server.accept();
System.out.println("Received request from " + nextClient.getInetAddress()+ ":"+ nextClient.getPort());
FileInputStream fis=new FileInputStream(fileOut);
OutputStream out =nextClient.getOutputStream();
PrintStream fileOutS = new PrintStream(out);
fileOutS.print(filePath+"\r\n");
byte[] bs = new byte[DATA_SIZE];
int length;
System.out.println("Sending data...");
while ( (length=fis.read(bs)) != -1){
out.write(bs,0,length);
bs = new byte[DATA_SIZE];
Thread.sleep(500);
}
System.out.println("Data sending completed");
fileOutS.close();
fis.close();
out.flush();
out.close();
nextClient.close();
}
}catch(Exception e){
e.printStackTrace();
}
}
}
客户端
package socket;
import java.net.*;
import java.io.*;
public class DataClient {
public static final int SERVICE_PORT = 1500;
public static final int DATA_SIZE = 1024*60;
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String hostName="192.168.10.201";
String filePath="D:"+File.separatorChar+"test2.dat";
try{
Socket client = new Socket(hostName,SERVICE_PORT);
System.out.println("Connection established");
System.out.println(client.getRemoteSocketAddress());
client.setSoTimeout(2000);
File file=new File(filePath);
if(file.exists()){
file.delete();
System.out.println("Create new file");
}
InputStream in = client.getInputStream();
BufferedReader readerFile = new BufferedReader(
new InputStreamReader(in));
DataInputStream reader = new DataInputStream(in);
FileOutputStream fos = new FileOutputStream(file);
String filename=readerFile.readLine();
System.out.println(filename);
byte[] bs = new byte[DATA_SIZE];
int length;
System.out.println("Data receiving started");
while( (length=reader.read(bs)) != -1){
fos.write(bs,0,length);
bs = new byte[DATA_SIZE];
Thread.sleep(200);
}
System.out.println("Receiving completed");
readerFile.close();
reader.close();
fos.close();
}catch(Exception e){
e.printStackTrace();
}
}
}
分享到:
相关推荐
本项目"SOCKET TCP 文件传输 客户端 服务器端 client svever"就是基于TCP协议构建一个简单的文件传输系统,通过客户端与服务器端的交互来完成文件的发送和接收。 首先,我们要了解TCP的基本原理。TCP通过三次握手...
在这个示例中,我们将探讨如何使用Java的Socket实现文件传输,包括服务器端和客户端的实现细节。 首先,我们从服务器端开始。服务器端的核心是监听特定端口(在这个例子中是8821)上的连接请求,并在接收到连接后...
标题中的“c#基于socket 服务器端TCP程序”指的是使用C#语言编写的一套服务器应用程序,它利用了Socket类库来处理TCP(传输控制协议)连接。TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议,广泛用于...
客户端发送删除文件的命令到服务器,服务器端接收到命令后,使用操作系统提供的API(如`unlink()`或`remove()`)删除指定的文件,并将结果反馈给客户端。由于文件删除操作不涉及大量数据传输,因此相对简单,但需要...
总的来说,C#基于Socket的通讯服务器端是网络编程的基础,它涉及到网络协议、并发处理、数据传输和错误控制等多个方面。通过这样的实践,开发者不仅可以掌握网络编程的基本技能,还能为构建更复杂的服务奠定坚实的...
客户端通过Socket的输出流将文件内容写入网络,服务器端则通过输入流接收这些数据。 5. **多线程处理**: - 为了处理多个并发的客户端连接,服务器端可能需要使用多线程。每个新连接的客户端都会启动一个新的线程...
在本示例中,我们关注的是客户端和服务器端的Socket编程,主要涉及到如何在局域网内进行文件传输。 首先,我们要理解Socket的基本概念。Socket可以看作是两台计算机之间的通信端点,它提供了数据传输的接口。在TCP/...
2. 文件读写:与服务器端类似,客户端也需要获取Socket的输入流和输出流,进行文件的读取或写入操作。 **三、文件上传流程** 1. 客户端选择本地文件,读取文件内容到字节数组。 2. 通过Socket的OutputStream将字节...
在IT领域,Socket通信是一种基于TCP/IP协议族的...客户端通过建立Socket连接,读取文件内容并写入Socket的输出流,而服务器端则接收这些数据并保存到本地。这个过程涉及到了网络编程、文件I/O和流操作等多个知识点。
Socket编程是网络应用程序开发的基石,通过本段代码的学习,我们了解了如何在Windows环境下使用Winsock库实现Socket服务器端和客户端的基本功能。掌握Socket编程不仅可以帮助开发者构建复杂的网络应用,还能加深对...
客户端将本地文件发送到服务器,而服务器端接收并保存这些文件。 首先,让我们从服务器端开始。服务器端需要监听特定的端口,等待客户端的连接请求。一旦有客户端连接,服务器就可以接收文件数据。以下是一个基本的...
本资源"**C# Socket Udp 通信服务器端(控制台应用程序)**"提供了C#语言实现的UDP通信服务器端代码,它是一个基于控制台的应用程序,特别适用于学习和开发UDP相关项目。本地端口设置为10000,意味着服务器将在该端口...
总结来说,C# Socket UDP通信服务器端的实现涉及创建Socket实例、绑定到指定端口、接收和发送数据报,以及可能的服务化部署。对于开发者来说,理解这些概念和步骤是构建高效网络应用程序的关键。
本篇文章将基于提供的文件信息,深入探讨如何使用C#语言来实现服务器端的Socket编程,并且会涵盖TCP协议的基础、HTTP协议的工作原理以及Socket在其中的应用。 #### 一、Socket基础 Socket是一种用于在网络节点之间...
1. **创建Server Socket**:服务器端通过`socket.socket()`函数创建一个Socket对象,并调用`bind()`方法绑定到指定的IP地址和端口号,然后调用`listen()`方法开始监听。 2. **接受连接**:当客户端尝试连接时,...
在提供的压缩包文件中,"ConsoleApplication1"可能是一个简单的C# Socket服务器示例,而"demo"可能是Java客户端的代码。"说明.txt"应该包含了更详细的实现细节和使用说明。为了更好地理解这个系统,你需要阅读这些...
服务器端需要读取文件并发送给客户端,而客户端则接收文件并保存到本地。具体实现可以参考文件上传的过程,只是需要注意调整数据流的方向。 #### 五、总结 通过本文的介绍,我们可以了解到使用 Socket 实现文件...
服务器端读取文件并将其内容通过socket发送到客户端,客户端则接收数据并写入本地文件。需要注意的是,由于TCP是流式传输,所以可能需要处理数据的边界问题,比如使用固定大小的缓冲区或者特殊的分隔符来确保数据的...
本项目"简单socket文件传输(类似FTP)服务器端"实现了类似FTP(File Transfer Protocol)的功能,允许用户通过网络进行文件的上传和下载,同时支持断点续传和多线程,提升了文件传输的效率和可靠性。 首先,我们来...
在本主题中,我们将深入探讨“简单的socket服务器/客户端编程”的概念、原理及其实现步骤,这非常适合初学者入门。 首先,让我们理解什么是Socket。Socket是操作系统提供的一个接口,它允许应用程序通过网络进行...