Java世界

学习笔记

常用链接

统计

积分与排名

天籁村

新华网

雅虎

最新评论

海运项目:ServerSort类

package com.sinojava.haiyun;
import java.io.*;
import java.net.*;
import java.util.ArrayList;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
//服务器端类
public class ServerSort {
    private Frame frame;
    private TextArea display;
    //用于航次计数
    private int count = 0;
    private ObjectOutputStream output;
    private ObjectInputStream input;
    private ServerSocket ser;
    private Socket soc;
    //用于客户端技术
    private int counter = 0;
    ArrayList list = new ArrayList();
    //创建Exporter对象exe
    Exporter exe = new Exporter();
    //构建服务器端GUI
    public ServerSort() {
        frame = new Frame("服务器端处理");
        display = new TextArea();
        frame.add(display);
        frame.setSize(500,500);
        frame.setLocation(200, 200);
        frame.setVisible(true);
        //退出程序
        frame.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
    }
    //运行服务器,连接客户端
    public void runServer() {    
          try {
             // 第一步:创建一个ServerSocket
             ser = new ServerSocket(5000);
             while(true) {
                 //计数多少个客户端
                 counter++;
                 //设置JTextArea不能被更改
                 display.setEditable(false);
                // 第二步:等待一个连接
                waitForConnection();
                // 第三步:获取接受数据
                getStreams();
                // 第四步:连接处理
                processConnection();
                // 第五步:关闭连接
                closeConnection();
             }
          }catch (IOException e) {
             e.printStackTrace();
          }
       }
    
    //向客户端发送信息
    private void sendData(String message) {
          try {
             output.writeObject(message);
             output.flush();
          }
          catch (IOException e) {
             display.append("\n错误写入对象");
          }
       }
    //第二步:等待一个连接
    private void waitForConnection() throws IOException {
         display.setText("等待连接\n");
         soc = ser.accept();    
         //InetAddress类采用工厂设计模式,有三个静态工厂方法,如getHostName or getLocalHost。
         display.append("Socket "+counter+" 接收来至:"+soc.getInetAddress().getHostName());
     }
       // 获取接受数据
     private void getStreams() throws IOException {
         output = new ObjectOutputStream(soc.getOutputStream());
         output.flush();
         input = new ObjectInputStream(soc.getInputStream());
         display.append("\n获得I/O流\n\n\n");
     }
       // 连接处理
     private void processConnection() throws IOException {
         String message ="服务器: 连接成功\n\n\n";
         output.writeObject(message);
         output.flush();
         do {
             try {
                message = (String)input.readObject();
                //解析字符串
                exe.splitText(message);
                sendData("成功从服务器端接收处理后的数据:"+"\n\n");
                //遍历集合
                Iterator i = exe.list.iterator();
                while (i.hasNext()) {
                    //将遍历出来的对象Object转成Exporter类型
                    exe = (Exporter) i.next();
                    //变量来累计航行次数
                    count++;
//                    在集合中放入箱型参数
                    list.add(exe.getCnttype());
                    //发送字符数据给客户端
                    sendData("船名:"+exe.getShipname()+"\n");
                    sendData("航次:"+exe.getVoyage()+"\n");
                    sendData("提单号:"+exe.getBlno()+"\n");
                    sendData("目的港:"+exe.getDestination()+"\n");
                    sendData("集装箱尺寸:"+exe.getCntsize()+"\n");
                    sendData("箱型:"+exe.getCnttype()+"\n");
                    sendData("箱量:"+exe.getCntqnt()+"\n");
                    sendData("经纪人:"+exe.getCntoperator()+"\n");
                    sendData("备注:"+exe.getRemark()+"\n");
                    sendData("本航次的船名: "+exe.getShipname()+"; 航次: "+exe.getVoyage()+"; 业务量: "+exe.getCntqnt()+"; 箱型: "+exe.getCnttype()+"\n");
                    sendData("--------------------------------------------------\n");
                }
                sendData("--------------------------------------------------\n");
                sendData("一共有:" + count + "航次"+"\n");
                sendData(list.size()+" 个箱型 :"+list+"\n");
                display.append("文件处理完成,已发送至客户端!"+"\n");
                display.setCaretPosition(display.getText().length());
                
             }
             catch(ClassNotFoundException e) {
                display.append("\n未知对象类型接收");
             }
          } while(true);
       }
     //关闭连接
     private void closeConnection() throws IOException {
         display.append("\n用户终端连接");
         output.close();
         input.close();
         soc.close();
     }
     //main方法
     public static void main(String args[]) {
         ServerSort ss = new ServerSort();
         //运行服务器
         ss.runServer();
     }

}

posted on 2007-11-16 14:04 Rabbit 阅读(397) 评论(0)  编辑  收藏


只有注册用户登录后才能发表评论。


网站导航: