simplechatclient.java
来自「java learn PPT java learn PPT java learn」· Java 代码 · 共 202 行
JAVA
202 行
import java.io.*;
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
import java.net.*;
import java.util.*;
public class SimpleChatClient extends Applet implements ActionListener
{
// 服务器或者其他聊天服务所保留的句柄数组
public static final String[] reservedHandles = { "Server" };
// 用户的"句柄", 或者昵称
protected String handle;
// 用于在多点传送群中通信用的MulticastConnection
protected MulticastConnection client;
// 显示欢迎消息用的文本域
protected TextArea textArea;
// 用于打印离开消息的域
protected TextField input;
// 发送消息用的按钮
protected Button send;
// 允许客户切换消息回显方式
protected Checkbox echo;
// 多点传送群地址
protected String address;
// 用给定的句柄和地址创建一个新的SimpleChatClient
public SimpleChatClient(String clientName, String addr) throws Exception
{
address = addr;
handle = clientName;
}
public void init()
{
// 创建控制I/O的小部件
textArea = new TextArea("", 15, 80, TextArea.SCROLLBARS_VERTICAL_ONLY);
textArea.setEditable(false);
add(textArea);
Panel p = new Panel();
input = new TextField("", 80);
// 注册输入框在回车键按下时发送消息
input.addKeyListener(new KeyAdapter()
{
public void keyTyped(KeyEvent e)
{
if(e.getKeyChar() == '\n')
{
sendMessage(input.getText());
input.setText("");
}
}
} );
p.add(input);
send = new Button("Send");
send.addActionListener(this);
p.add(send);
add(p);
echo = new Checkbox("Echo responses", true);
add(echo);
// 连接到多点传送群
try
{
textArea.append("System Message: connecting to " + address + " : " +
MulticastConnection.DEFAULT_PORT + "...\n");
client = new MulticastConnection(address, MulticastConnection.DEFAULT_PORT);
textArea.append("System Message: successfully connected to server!\n");
}
catch(Exception e)
{
textArea.append("System Error: Could not connect to Chat Server! " + e + "\n");
send.setEnabled(false);
}
}
// 接收从多点传送群过来的消息
public void start()
{
// 接收到的消息
String msg = "";
// 确保我们仍然在线
while(send.isEnabled())
{
msg = client.recv();
// 检查客户端是否允许回显
if(echo.getState() == false)
{
// 不要接收我们发送的消息
if(! msg.startsWith("<" + handle + ">:"))
{
textArea.append(msg+"\n");
}
}
else
{
textArea.append(msg+"\n");
}
}
textArea.append("System Message: disconnected from Chat Server!\n");
}
public void destroy()
{
// 断开客户端
client.disconnect();
}
// 尝试发送指定的消息
public void sendMessage(String msg)
{
// 如果消息只是空格的话则不发送
if(! "".equals(msg.trim()))
{
// 发送用户的句柄和消息
if(! client.send("<" + handle + ">: " + msg.trim()))
{
disconnect();
}
}
}
public void disconnect()
{
client.disconnect();
send.setEnabled(false);
}
public void actionPerformed(ActionEvent e)
{
sendMessage(input.getText());
input.setText("");
}
public static void main(String[] args) throws Exception
{
// 得到用户的句柄
String name = "";
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
System.out.print("Enter your name: ");
final String[] handles = SimpleChatClient.reservedHandles;
name = reader.readLine();
boolean usingReservedHandle = true;
// 确保用户输入的是一个还没使用的昵称
while(usingReservedHandle)
{
usingReservedHandle = false;
for(int i = 0; i < handles.length; i++)
{
if(name.equals(handles[i]))
{
usingReservedHandle = true;
System.out.print(name + " is a reserved handle; try another: ");
name = reader.readLine();
break;
}
}
}
// 创建一个新的SimpleChatClient并把它加载到一个Frame中
Applet a = new SimpleChatClient(name, "224.0.0.21");
a.init();
Frame f = new Frame("Java Chat Client - <" + name + ">");
f.setSize(650, 400);
f.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
} );
f.add(a);
f.show();
a.start();
}
} // SimpleChatClient
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?