Java网络文件传输的实现—Socket编程
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Java网络文件传输的实现——Socket编程本程序分为服务器和客户端两个小程序。
主要实现的功能是:
客户端向服务器端请求一个文件的传输连接,
服务器接收到请求命令后,要求客户端发送用户名和密码,
如果正确,就执行传输文件的过程,客户端接收完后,
保存到一个文件中并在屏幕上显示出来。
设计原理:
服务器端建立一个SocketServer等待客户端的连接,每来一个客户端的请求连接,就创建一个新的线程对其进行单独服务,然后继续等待其他的客户端的连接。创建一个服务器文件server.txt。
客户端向服务器发送文件传输请求,在服务器端要求鉴权时,输入用户名和密码发送给服务器验证,如果验证通过就开始文件传输。
使用方法,如果需要重新编译的话输入以下两条命令:
javac SendFileSocket.java
javac SendFileClient.java
在命令行下的运行方式:
服务器端:
javac SendFileSocket.java
java SendFileSocket
客户端:
javac SendFileClient.java
java SendFileClient serverIPAddress
例如: java SendFileClient 192.168.1.101
用户名和密码:cyf@123
服务器端SendFileSocket.java:
//package cyf.socket;
import .*;
import java.io.*;
/****************************
* 一个简单的多线程服务器程序,用于传输文件
*
* @author cyf
****************************/
public class SendFileSocket extends Thread
{
/*************
* @param args
*************/
public static void main( String[] args )
{
/*if ( args.length > 0 ) // 如果有参数输入就启动服务器程序
{
server( );
} else
{
// 否则启动客户端进程
client( );
}*/
server( );//启动服务器程序
}
private static final int PORT = 6000;
private Socket s;
private static final String name = "cyf";
private static final String password = "123";
public SendFileSocket( Socket s )
{
this.s = s;
}
public void run()
{
try
{
OutputStream os = s.getOutputStream( );
InputStream is = s.getInputStream( );
os.write( "Hello,welcome you!".getBytes( ) );
byte[] buf = new byte[100];
while ( true )
{
int len = is.read( buf );
String revStr = new String( buf, 0, len );
System.out.println( "This client wants to "+revStr );
String fileName;
if ( revStr.startsWith( "get " ) )//表明客户端请求传输一个文件
{
os.write( "Please input your name and password! Using the
format:name@password"
.getBytes( ) );
fileName = getFileName( revStr );
len = is.read( buf );
revStr = new String( buf, 0, len );
System.out.println( "The received user name and password:"+revStr);
if ( revStr.startsWith( "cyf@123" ) )
{
FileInputStream fins = new FileInputStream( fileName );
//byte[] fielBuf = new byte[100];
int data;
while ( -1 != ( data = fins.read( ) ) )//从文件中读取数据,每次读取1字节
{
os.write( data ); //将读取到的数据写到网络数据流中发送给客户段
}
break;
}
} else
{