使用网络文本文件查看器的步骤

使用网络文本文件查看器的步骤

这是一个课后练习。主要是熟练掌握IO流,还有TCP程序的一般开发步骤。

TCP程序开发的一般步骤:

Server端:

1. 创建ServerSocket ss在这里要指定监听端口。

2. 获得Socket s 通过ss.accept()方法获得客户端的连接请求。

3. 获得IO 通过s.getInputStreams.getOutputStream两个方法获得输入输出流

4. 处理数据,传送数据。

5. 关闭IO

6. 关闭Socket s

7. 关闭ServerSocket ss

Client端:

1. 创建Socket s 在这里指定网络主机及其相应端口。

2. 获得IO

3. 处理数据,传送数据

4. 关闭IO

5. 关闭Socket s

本程序的基本功能是连接到服务器,在提交一个文件路径后,服务器判断是否是文本文件,是并且存在的话就传送文件内容到客户端。

为了功能更加人性化点,在客户端界面加入主机及其端口和文件地址文本框,还有连接,断开连接,下载文件按钮,下载的文件内容显示在文本域中,另外加一条状态栏,用于显示当前客户端状态。在服务器端界面加入监听端口文本框和开始监听按钮,日志信息显示在文本域中。

本程序基本功能实现,但容错性还不是很好。异常没进行处理。

本程序源码如下(开发语言JAVA,开发环境JDK 1.5 Windows 2003):

开发过程中遇到一个难点就是不知道如何判断网络流的结束,文件流中的readLine==nullread==-1都判断不出来,使客户端在等着读但服务器端已经结束。最后通过在服务器端传送完文件后,加传一个标志字符串(quit)用于通知客户端本次数据已经传送完毕。在客户端通过判断接收到的字符串是不是标志字符来结束读循环。但是这样又想到一个问题,那就是服务器端如果不是自己开发的,那怎么样实现两者间的通信呢?现在课程太紧了,暂时没时间处理。

字节流实现:

使用网络文本文件查看器的步骤packageserver;
使用网络文本文件查看器的步骤
importjava.awt.*;
使用网络文本文件查看器的步骤
importjava.awt.event.*;
使用网络文本文件查看器的步骤
importjavax.swing.*;
使用网络文本文件查看器的步骤
importjava.net.*;
使用网络文本文件查看器的步骤
importjava.io.*;
使用网络文本文件查看器的步骤
importjava.util.*;
使用网络文本文件查看器的步骤
classDownServerextendsWindowAdapterimplementsActionListener
使用网络文本文件查看器的步骤使用网络文本文件查看器的步骤
{
使用网络文本文件查看器的步骤JFramejframe
=newJFrame("远程文件查看器服务端");
使用网络文本文件查看器的步骤JPaneljpanel
=newJPanel();
使用网络文本文件查看器的步骤JButtonstartJButton
=newJButton("启动");
使用网络文本文件查看器的步骤JLabellabel
=newJLabel("监听端口");
使用网络文本文件查看器的步骤JTextFieldportJTextField
=newJTextField(6);
使用网络文本文件查看器的步骤JTextArealogJTextArea
=newJTextArea();
使用网络文本文件查看器的步骤JScrollPanelogJScrollPane
=newJScrollPane(logJTextArea);
使用网络文本文件查看器的步骤Dated
=newDate();
使用网络文本文件查看器的步骤
使用网络文本文件查看器的步骤ServerSocketss;
使用网络文本文件查看器的步骤Sockets;
使用网络文本文件查看器的步骤
使用网络文本文件查看器的步骤InputStreamis;
使用网络文本文件查看器的步骤OutputStreamos;
使用网络文本文件查看器的步骤BufferedInputStreambis;
使用网络文本文件查看器的步骤BufferedOutputStreambos
=null;
使用网络文本文件查看器的步骤BufferedReaderbr;
使用网络文本文件查看器的步骤PrintWriterpw;
使用网络文本文件查看器的步骤
byte[]b=newbyte[1024];
使用网络文本文件查看器的步骤
intlen;
使用网络文本文件查看器的步骤StringBuffersb;
使用网络文本文件查看器的步骤Stringfilename;
使用网络文本文件查看器的步骤Stringport
="6666";
使用网络文本文件查看器的步骤
使用网络文本文件查看器的步骤
publicDownServer()
使用网络文本文件查看器的步骤使用网络文本文件查看器的步骤
{
使用网络文本文件查看器的步骤jpanel.add(label);
使用网络文本文件查看器的步骤jpanel.add(portJTextField);
使用网络文本文件查看器的步骤jpanel.add(startJButton);
使用网络文本文件查看器的步骤startJButton.addActionListener(
this);
使用网络文本文件查看器的步骤jframe.getContentPane().add(jpanel,
"North");
使用网络文本文件查看器的步骤jframe.getContentPane().add(logJScrollPane);
使用网络文本文件查看器的步骤
使用网络文本文件查看器的步骤jframe.addWindowListener(
this);
使用网络文本文件查看器的步骤jframe.setSize(
400,300);
使用网络文本文件查看器的步骤jframe.setResizable(
true);
使用网络文本文件查看器的步骤jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
使用网络文本文件查看器的步骤jframe.setVisible(
true);
使用网络文本文件查看器的步骤
使用网络文本文件查看器的步骤}

使用网络文本文件查看器的步骤publicvoidactionPerformed(ActionEvente)
使用网络文本文件查看器的步骤使用网络文本文件查看器的步骤
{
使用网络文本文件查看器的步骤Stringstr
=e.getActionCommand();
使用网络文本文件查看器的步骤
if(str.equals("启动"))
使用网络文本文件查看器的步骤使用网络文本文件查看器的步骤
{
使用网络文本文件查看器的步骤port
=portJTextField.getText();
使用网络文本文件查看器的步骤logJTextArea.append(d.toString()
+":在"+port+"端口启动服务 ");
使用网络文本文件查看器的步骤Servers
=newServer();
使用网络文本文件查看器的步骤s.start();
使用网络文本文件查看器的步骤}

使用网络文本文件查看器的步骤if(str.equals("停止"))
使用网络文本文件查看器的步骤使用网络文本文件查看器的步骤
{
使用网络文本文件查看器的步骤
使用网络文本文件查看器的步骤}

使用网络文本文件查看器的步骤}

使用网络文本文件查看器的步骤classServerextendsThread
使用网络文本文件查看器的步骤使用网络文本文件查看器的步骤
{
使用网络文本文件查看器的步骤
publicvoidrun()
使用网络文本文件查看器的步骤使用网络文本文件查看器的步骤
{
使用网络文本文件查看器的步骤使用网络文本文件查看器的步骤
try{ss=newServerSocket(Integer.parseInt(port));}catch(Exceptione){e.printStackTrace();}
使用网络文本文件查看器的步骤while(true)
使用网络文本文件查看器的步骤使用网络文本文件查看器的步骤
{
使用网络文本文件查看器的步骤
try
使用网络文本文件查看器的步骤使用网络文本文件查看器的步骤{
使用网络文本文件查看器的步骤s
=ss.accept();
使用网络文本文件查看器的步骤is
=s.getInputStream();
使用网络文本文件查看器的步骤os
=s.getOutputStream();
使用网络文本文件查看器的步骤bos
=newBufferedOutputStream(os);
使用网络文本文件查看器的步骤br
=newBufferedReader(newInputStreamReader(is));
使用网络文本文件查看器的步骤logJTextArea.append(s.getInetAddress()
+""+d.toString()+"请求连接成功! ");
使用网络文本文件查看器的步骤}

使用网络文本文件查看器的步骤使用网络文本文件查看器的步骤catch(Exceptione){e.printStackTrace();}
使用网络文本文件查看器的步骤
使用网络文本文件查看器的步骤sb
=newStringBuffer();
使用网络文本文件查看器的步骤
while(true)
使用网络文本文件查看器的步骤使用网络文本文件查看器的步骤
{
使用网络文本文件查看器的步骤
使用网络文本文件查看器的步骤使用网络文本文件查看器的步骤
try{filename=br.readLine();}catch(Exceptione){e.printStackTrace();}
使用网络文本文件查看器的步骤
使用网络文本文件查看器的步骤
if(filename.equals("quit"))
使用网络文本文件查看器的步骤使用网络文本文件查看器的步骤
{
使用网络文本文件查看器的步骤logJTextArea.append(s.getInetAddress()
+""+d.toString()+"与服务器断开连接 ");
使用网络文本文件查看器的步骤
try
使用网络文本文件查看器的步骤使用网络文本文件查看器的步骤{
使用网络文本文件查看器的步骤bos.close();
使用网络文本文件查看器的步骤s.close();
使用网络文本文件查看器的步骤}

使用网络文本文件查看器的步骤使用网络文本文件查看器的步骤catch(Exceptione){e.printStackTrace();}
使用网络文本文件查看器的步骤finally
使用网络文本文件查看器的步骤使用网络文本文件查看器的步骤{
使用网络文本文件查看器的步骤
break;
使用网络文本文件查看器的步骤}

使用网络文本文件查看器的步骤}

使用网络文本文件查看器的步骤logJTextArea.append(s.getInetAddress()+""+d.toString()+"请求查看文件"+filename+" ");
使用网络文本文件查看器的步骤Filef
=newFile(filename);
使用网络文本文件查看器的步骤
if(f.exists())
使用网络文本文件查看器的步骤使用网络文本文件查看器的步骤
{
使用网络文本文件查看器的步骤
if(filename.endsWith(".java")||filename.endsWith(".txt")||filename.endsWith(".html")||filename.endsWith(".jsp")||filename.endsWith(".asp")||filename.endsWith(".css")||filename.endsWith(".xml"))
使用网络文本文件查看器的步骤使用网络文本文件查看器的步骤
{
使用网络文本文件查看器的步骤
try
使用网络文本文件查看器的步骤使用网络文本文件查看器的步骤{
使用网络文本文件查看器的步骤FileInputStreamfis
=newFileInputStream(f);
使用网络文本文件查看器的步骤BufferedInputStreambis
=newBufferedInputStream(fis);
使用网络文本文件查看器的步骤
byte[]b=newbyte[1024];
使用网络文本文件查看器的步骤
intlen=0;
使用网络文本文件查看器的步骤StringBuffersb
=newStringBuffer();
使用网络文本文件查看器的步骤
while((len=bis.read(b))!=-1)
使用网络文本文件查看器的步骤使用网络文本文件查看器的步骤