您的位置:首页 > 理论基础 > 计算机网络

网络编程之Socket通信实现文件的复制

2013-04-20 18:21 615 查看
代码1-1与代码1-2是一个java网络编程Socket通信的一个简单例子,服务端(先启动)监听客户端,当客户端启动时,服务端打印出客户端的输出的消息。

1-1 Socket通信之服务端的代码

import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;

//先运行服务端,对客户端进行监听,接受客户端发送的信息
//注意这里只是展示Socket通信的简单例子,在实际使用中,对于异常应该捕获,最好不要抛出
public class Server {
public static void main(String[] args) throws Exception {
ServerSocket serverSocket=new ServerSocket(8888);
Socket socket=serverSocket.accept();

InputStream is=socket.getInputStream();   //找到接口
//写出
byte[] buff=new byte[1024];     //缓冲,输出
int ch;
System.out.println("服务端输出客户端传来的信息:");
while((ch=is.read(buff))!=-1){
for (int i = 0; i < ch; i++) {
System.out.print((char)buff[i]);
}
}
is.close();
}
}


1-2 Socket通信之客户端的例子的代码

import java.io.OutputStream;
import java.net.Socket;

//客户端发出信息,服务端收到信息
public class Cilent {
public static void main(String[] args) throws Exception {
Socket socket=new Socket("127.0.0.1",8888);
OutputStream outputStream=socket.getOutputStream();//对于客户端是输出,而对于服务端是输入
String str="Hello World!"; //客户端写入服务端的内容
outputStream.write(str.getBytes());
System.out.println("客户端启动");
outputStream.close();
socket.close();//关闭资源
}
}

先运行代码1-1,在运行代码1-2,在控制台打印如下信息:





上述客户端与服务端的通信,输入是客户端的一个字符串,那么根据 一个简单的文件读写、复制的例子和 一个简单的缓冲流读写的例子 的学习,可以利用Socket通信来实现文件的操作,即将文件的内容复制到另外一个文件中。

1-3 Socket通信实现文件的复制之服务端代码

import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;

//文件的复制
public class Server1 {
public static void main(String[] args) throws Exception {
ServerSocket ss=new ServerSocket(8888);
Socket s=ss.accept();
InputStream is=s.getInputStream(); // 连接本机端口
//System.out.println("服务端启动成功!");
FileOutputStream fos=new FileOutputStream("e:\\b.txt"); //把要复制的文件内容复制到指定位置

byte[] buff=new byte[1024]; //缓冲流  //制到哪一个文件夹
int len;
while((len=is.read(buff))!=-1){
fos.write(buff, 0, len);
}

fos.close();
is.close();

System.out.println("服务端启动成功!");
}
}

1-4 Socket通信实现文件的复制之客户端代码

import java.io.FileInputStream;
import java.io.OutputStream;
import java.net.Socket;
//实现同一台机子的不同磁盘的文件的复制,也可以实现不同机子连接的文件的复制,一台先启动服务端监听
//令外一台发送请求,成功连接后进行文件的复制
public class Cilent1 {
public static void main(String[] args) throws Exception {
Socket s=new Socket("127.0.0.1",8888);
OutputStream out=s.getOutputStream();
//要复制的内容所在的路径,注意:文件一定要是存在的。
FileInputStream  fis=new FileInputStream("e:\\a.txt");
System.out.println("客户端启动成功!");

byte[] buff=new byte[1024];  //缓冲流读入内存
int len;
while((len=fis.read(buff))!=-1){
out.write(buff, 0, len);
}
System.out.println("文件内容已复制到指定的文件夹!");
fis.close();
s.close();
}
}

先运行代码1-3,在运行代码1-4,运行前e盘根目录不存在b.txt,a.txt文本文件的内容是:





运行后,在e盘根目录产生b.txt文本文件,文件的内容与a.txt相同(复制的内容),如图:





同时控制台打印如下信息:





从以上的代码可以看出,输入的可以是指定的字符串,也可以是文件内容,当然可以是输入设备输入的内容,可以看出他们的操作基本相同。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐