文档详情

实现群聊客户端.docx

发布:2017-12-15约6.61千字共10页下载文档
文本预览下载声明
package com;//**********客户端将消息发送给服务端,服务端接收后再将其转发给其他客户端*****************************import java.awt.BorderLayout;import java.awt.Frame;//引入相关的包import java.awt.TextArea;import java.awt.TextField;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.EOFException;import java.io.IOException;import java.net.Socket;import java.net.SocketException;import java.net.UnknownHostException;/** * * 每个客户端应包含两个线程,一个负责读取用户的键盘输入(从tfTxt中读取数据) 并将用户输入的数据写入Socket对应的输出流中,发送给服务器; * 一个负责读取Socket对应输入流中的数据(从服务器端发送过来的数据) 并将这些数据打印输出。 */public class ChatClient extends Frame {Socket s = null;// Socket对象代表两端的通信端口,并通过Socket产生IO流来进行网络通信DataOutputStream dos = null;// 创建一个新的数据输出流,将数据写入指定基础输出流。// 有时没有必要存储整个对象的信息,而只是要存储一个对象的成员数据,// 成员数据的类型假设都是Java的基本数据类型,这样的需求不必使用到与Object输入、输出相关的流对象,// 可以使用DataInputStream、DataOutputStream来写入或读出数据。DataInputStream dis = null;// 以上只是输入输出流的定义,初始化是在连接之后才初始化的private boolean bConnected = false;// 在awt编程中所有事件必须有特定对象(事件监听器)来处理,// 而Frame和组件本身并没有事件处理能力// 为了使图形界面能够接受用户的操作,必须给各个组件加上事件处理机制// 当用户单击一个按钮,或者单击某个菜单项,或者单击窗口右上角的状态按钮时,// 这些动作就会触发一个相应的事件,该事件由awt封装成相应的Event对象,// 该事件会触发事件源上注册的事件监听器(特殊的java对象),// 事件监听器actionListener调用对应的事件处理器actionEvent来做出相应的响应// 定义成员变量,而不是局部变量,方便后面响应事件TextField tfTxt = new TextField();// 单行文本框// 我们现在在TextField中输入内容没有任何响应,所以我们还要对TextField的actionEvent做出处理// 接下来我们写实现ActionListener接口的类TextArea taContent = new TextArea();// 多行文本域----用于显示聊天信息Thread tRecv = new Thread(new RecvThread());// 成员变量,其他地方可以访问,可以控制它的方法,然后让其停止public static void main(String[] args) {new ChatClient().launchFrame();}public void launchFrame() {this.setLocation(400, 300);// setLocation(400,300);this.setSize(300, 300);// 用父类Frame的add方法进行添加// BorderLayout是Frame中的布局管理器,分东西南北中五部分,上北下南左西右东add(tfTxt, BorderLayout.SOUTH);// 作输入tfTxt.addActionListener(new TFListener());add(taContent, BorderLayout.NORTH);// 作显示pack();// 去除中间部分// 点击窗口右上角的叉号,窗口依然不
显示全部
相似文档