⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 chatclient.java

📁 用不同方法实现聊天室功能的JAVA代码
💻 JAVA
字号:
/*
 * ChatClient.java
 *
 * Created on 2007年10月27日, 下午1:26
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package chatroom;

import java.applet.*; 
import java.awt.*; 
import java.io.*; 
import java.net.*; 
import java.awt.event.*; 
public class ChatClient extends Applet{ 
protected boolean loggedIn;//登入状态 
protected Frame cp;//聊天室框架 
protected static int PORTNUM=7777; //缺省端口号7777 
protected int port;//实际端口号 
protected Socket sock; 
protected BufferedReader is;//用于从sock读取数据的BufferedReader 
protected PrintWriter pw;//用于向sock写入数据的PrintWriter 
protected TextField tf;//用于输入的TextField 
protected TextArea ta;//用于显示对话的TextArea 
protected Button lib;//登入按钮 
protected Button lob;//登出的按钮 
final static String TITLE ="Chatroom applet>>>>>>>>>>>>>>>>>>>>>>>>"; 
protected String paintMessage;//发表的消息 
public ChatParameter Chat; 
public void init(){ 
paintMessage="正在生成聊天窗口"; 
repaint(); 
cp=new Frame(TITLE); 
cp.setLayout(new BorderLayout()); 
String portNum=getParameter("port");//呢个参数勿太明 
port=PORTNUM; 
if (portNum!=null) //书上是portNum==null,十分有问题 
port=Integer.parseInt(portNum); 
//CGI 
ta=new TextArea(14,80); 
ta.setEditable(false);//read only attribute 
ta.setFont(new Font("Monospaced",Font.PLAIN,11)); 
cp.add(BorderLayout.NORTH,ta); 
Panel p=new Panel(); 
Button b; 
//for login button 
p.add(lib=new Button("Login")); 
lib.setEnabled(true); 
lib.requestFocus(); 
lib.addActionListener(new ActionListener() { 
public void actionPerformed(ActionEvent e){ 
login(); 
lib.setEnabled(false); 
lob.setEnabled(true); 
tf.requestFocus();//将键盘输入锁定再右边的文本框中 
} 
}); 
//for logout button 
p.add(lob=new Button ("Logout")); 
lob.setEnabled(false); 
lob.addActionListener(new ActionListener(){ 
public void actionPerformed(ActionEvent e){ 
logout(); 
lib.setEnabled(true); 
lob.setEnabled(false); 
lib.requestFocus(); 
} 
}); 
p.add(new Label ("输入消息:")); 
tf=new TextField(40); 
tf.addActionListener(new ActionListener(){ 
public void actionPerformed(ActionEvent e){ 
if(loggedIn){ 
//pw.println(Chat.CMD_BCAST+tf.getText());//Chat.CMD....是咩野来? 
int j=tf.getText().indexOf(":"); 
if(j>0) pw.println(Chat.CMD_MESG+tf.getText()); 
else 
pw.println(Chat.CMD_BCAST+tf.getText()); 
tf.setText("");//勿使用flush()? 
} 
} 
}); 
p.add(tf); 
cp.add(BorderLayout.SOUTH,p); 
cp.addWindowListener(new WindowAdapter(){ 
public void windowClosing(WindowEvent e){ 
//如果执行了setVisible或者dispose,关闭窗口 
ChatClient.this.cp.setVisible(false); 
ChatClient.this.cp.dispose(); 
logout(); 
} 
}); 
cp.pack();//勿明白有咩用? 
//将Frame cp放在中间 
Dimension us=cp.getSize(), 
them=Toolkit.getDefaultToolkit().getScreenSize(); 
int newX=(them.width-us.width)/2; 
int newY=(them.height-us.height)/2; 
cp.setLocation(newX,newY); 
cp.setVisible(true); 
paintMessage="Window should now be visible"; 
repaint(); 
} 
//登录聊天室 
public void login(){ 
if(loggedIn) return; 
try{ 
sock=new Socket(getCodeBase().getHost(),port); 
is=new BufferedReader(new InputStreamReader(sock.getInputStream())); 
pw=new PrintWriter(sock.getOutputStream(),true); 
}catch(IOException e){ 
showStatus("Can't get socket: "+e); 
cp.add(new Label("Can't get socket: "+e)); 
return;} 
//构造并且启动读入器,从服务器读取数据,输出到文本框中 
//这里,长成一个线程来避免锁住资源(lockups) 
new Thread (new Runnable(){ 
public void run(){ 
String line; 
try{ 
while(loggedIn &&((line=is.readLine())!=null)) 
ta.appendText(line+"\n"); 
}catch(IOException e){ 
showStatus("我的天啊,掉线了也!!!!"); 
return; 
} 
} 
}).start(); 
//假定登录(其实只是打印相关信息,并没有真正登录) 
// pw.println(Chat.CMD_LOGIN+"AppletUser"); 
pw.println(Chat.CMD_LOGIN+"AppletUser"); 
loggedIn =true; 

} 
//模仿退出的代码 
public void logout(){ 
if(!loggedIn) 
return; 
loggedIn=false; 
try{ 
if(sock!=null) 
sock.close(); 
}catch(IOException ign){ 
// 异常处理哦 
} 
} 
//没有设置stop的方法,即使从浏览器跳到另外一个网页的时候 
//聊天程序还可以继续运行 
public void paint(Graphics g){ 
Dimension d=getSize(); 
int h=d.height; 
int w=d.width; 
g.fillRect(0,0,w,2); 
g.setColor(Color.black); 
g.drawString(paintMessage,10,(h/2)-5); 
} 

public class ChatParameter { 
public static final char CMD_BCAST='b'; 
public static final char CMD_LOGIN='l'; 
public static final char CMD_MESG='m'; 
public static final char CMD_QUIT='q'; 
public static final char SEPARATOR=':';//????? 
public static final int PORTNUM=7777; 
public boolean isValidLoginName(String line){ 
if (line.equals("CHATMASTER_ID")) 
return false; 
return true; 
} 
public void main(String[] argv){ 
} 
}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -