关于java5子棋代码的信息( 八 )


dispose();
System.exit(0);
}
}
/**
* 处理按钮事件
*/
public void actionPerformed(ActionEvent event) {
Object source = event.getSource();
if (source == connectButton){
// 如果点击连接按钮
if (soc == null) {
try {
// 使用端口2525实例化一个本地套接字
soc = new Socket(InetAddress.getLocalHost(), Constants.SERVER_PORT);
// 在控制台打印实例化的结果
System.out.println(soc);
//将ps指向soc的输出流
ps = new PrintStream(soc.getOutputStream());
//定义一个字符缓冲存储发送信息
StringBuffer info = new StringBuffer(Constants.CONNECT_IDENTIFER).append(Constants.SEPERATOR);
//其中INFO为关键字让服务器识别为连接信息
//并将name和ip用":"分开 , 在服务器端将用一个
//StringTokenizer类来读取数据
String userinfo = nameTextField.getText() + Constants.SEPERATOR
+ InetAddress.getLocalHost().getHostAddress();
ps.println(info.append(userinfo));
ps.flush();
//将客户端线程实例化,并启动
listener = new ClentListener(this, nameTextField.getText(), soc);
listener.start();
} catch (IOException e) {
System.out.println("Error:" + e);
disconnect();
}
}
} else if (source == disConnectButton){
// 如果点击断开连接按钮
disconnect();
} else if (source == sendMsgButton) {
//如果点击发送按钮
if (soc != null) {
//定义并实例化一个字符缓冲存储发送的聊天信息
StringBuffer msg = new StringBuffer(Constants.MSG_IDENTIFER).append(Constants.SEPERATOR);
//用打印流发送聊天信息
ps.println(msg.append(msgTextField.getText()));
ps.flush();
}
}
}
/**
* 断开与服务器的连接
*/
public void disconnect(){
if (soc != null) {
try {
// 用打印流发送QUIT信息通知服务器断开此次通信
ps.println(Constants.QUIT_IDENTIFER);
ps.flush();
soc.close(); //关闭套接字
listener.toStop();
soc = null;
} catch (IOException e) {
System.out.println("Error:" + e);
}
}
}
public static void main(String[] args){
ChatClient client = new ChatClient();
client.setVisible(true);
}
/**
* 客户端线程类用来监听服务器传来的信息
*/
class ClentListener extends Thread {
//存储客户端连接后的name信息
String name = null;
//客户端接受服务器数据的输入流
BufferedReader br = null;
//实现从客户端发送数据到服务器的打印流
PrintStream ps = null;
//存储客户端的socket信息
Socket socket = null;
//存储当前运行的ChatClient实例
ChatClient parent = null;
boolean running = true;
//构造方法
public ClentListener(ChatClient p, String n, Socket s) {
//接受参数
parent = p;
name = n;
socket = s;
try {
//实例化两个数据流
br = new BufferedReader(new InputStreamReader(s
.getInputStream()));
ps = new PrintStream(s.getOutputStream());
} catch (IOException e) {
System.out.println("Error:" + e);
parent.disconnect();
}
}
// 停止侦听
public void toStop(){
this.running = false;
}
//线程运行方法
public void run(){
String msg = null;
while (running) {
msg = null;
try {
// 读取从服务器传来的信息
msg = br.readLine();
System.out.println("receive msg: " + msg);
} catch (IOException e) {
System.out.println("Error:" + e);
parent.disconnect();
}
// 如果从服务器传来的信息为空则断开此次连接
if (msg == null) {

推荐阅读