このクライアントはまだまだ欠陥がありますが、動きます。どこに問題があるかわかるでしょうか。
どんな改良をすれば便利になるでしょうか。
使う時には、Server03,Server031,Server04,Server05 を相手サーバーとして使用できます。他の人とのメッセージ交換にはServer05が優れていますが、動作テストには、Server03やServer031も使えます。
/** 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>まで。