GUIを使うクライアント

クライアント

このクライアントはまだまだ欠陥がありますが、動きます。どこに問題があるかわかるでしょうか。

どんな改良をすれば便利になるでしょうか。

使う時には、Server03,Server031,Server04,Server05 を相手サーバーとして使用できます。他の人とのメッセージ交換にはServer05が優れていますが、動作テストには、Server03やServer031も使えます。

プログラム名 Client05.java

/** GUIで送受信するクライアント */
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;

public class Client05 extends JFrame implements ActionListener {
    JButton sndbttn;
    JTextField sndmsg;
    JTextField disthost;
    Socket mysoc;
    InputStreamReader in;
    BufferedReader inb;
    OutputStreamWriter out;
    BufferedWriter outb;

    public Client05() {
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        disthost = new JTextField();
        sndmsg   = new JTextField();
        sndbttn  = new JButton("送信");
        setLayout(new BorderLayout());
        add(disthost,BorderLayout.NORTH);
        add(sndmsg,  BorderLayout.CENTER);
        add(sndbttn, BorderLayout.SOUTH);
        
        sndbttn.addActionListener(this);
        
        pack();
        setVisible(true);
    }
    public void actionPerformed(ActionEvent ev) {
        if (ev.getSource() == sndbttn) {
            int PORT = 10001;
            try{
                mysoc = new Socket( disthost.getText(), PORT );
                in   = new InputStreamReader(mysoc.getInputStream());
                inb  = new BufferedReader(in);
                out  = new OutputStreamWriter(mysoc.getOutputStream());
                outb = new BufferedWriter(out);

                String msg = sndmsg.getText();
                outb.write( msg, 0, msg.length() );
                outb.newLine();
                outb.flush();
                sndmsg.setText( "waiting..." );
                String line;
                line = inb.readLine();
                sndmsg.setText( line  );

                outb.close();
                out.close();
                inb.close();
                in.close();
                mysoc.close();
            }
            catch( UnknownHostException e ) {
                System.err.println( "Host not found" );
            }
            catch( SocketException e ) {
                System.err.println("Socket Error");
            }
            catch( IOException e ) {
                System.err.println("IO Error");
            }
            catch( java.lang.Exception e ){
                System.out.println(e.toString());
            }
        }
    }
    public static void main( String[] args ) {
        Client05 frm = new Client05();
    }
}

課題

どんな問題を発見しましたか。またどのような改良があれば便利ですか。メールで知らせてください。安達<adachi@st.seiai.ed.jp> ,または 太田<otawa@st.seiai.ed.jp>まで。

もくじ

聖愛高等学校
http://www.seiai.ed.jp/
Last Modified