?? chatclient.java~85~
字號:
package com.soft.QQ;
import java.awt.*;
import javax.swing.*;
import com.borland.jbcl.layout.XYLayout;
import com.borland.jbcl.layout.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.net.*;
import com.soft.QQ.Helper.*;
import java.util.StringTokenizer;
/**
* <p>Title: </p>
*
* <p>Description: </p>
*
* <p>Copyright: Copyright (c) 2007</p>
*
* <p>Company: </p>
*
* @author not attributable
* @version 1.0
*/
public class ChatClient
extends JFrame implements Runnable {
DatagramSocket socket;
DatagramPacket mail_packge;
JPanel contentPane;
XYLayout xYLayout1 = new XYLayout();
JLabel label1 = new JLabel();
JTextField sender = new JTextField();
JLabel hostIP = new JLabel();
JLabel Hostport = new JLabel();
JButton connection = new JButton();
JTextField port = new JTextField();
JTable jTable1 = new JTable();
JTextField input = new JTextField();
JButton send = new JButton();
List list = new List(20, false);
ScrollPane scrollPane1 = new ScrollPane();
TextArea ChatArea = new TextArea();
JTextField address = new JTextField();
Thread thread;
Label la = new Label();
Label la2 = new Label();
JLabel la3 = new JLabel();
public ChatClient() {
try {
setDefaultCloseOperation(EXIT_ON_CLOSE);
jbInit();
thread = new Thread(this);
thread.start();
}
catch (Exception exception) {
exception.printStackTrace();
}
}
/**
* Component initialization.
*
* @throws java.lang.Exception
*/
private void jbInit() throws Exception {
contentPane = (JPanel) getContentPane();
contentPane.setLayout(xYLayout1);
setSize(new Dimension(500, 560));
setTitle("局域網(wǎng)聊天(客戶端)");
label1.setToolTipText("");
label1.setText("用戶昵稱");
sender.setText("McGRADY");
hostIP.setText("服務(wù)器IP");
Hostport.setText("端口號");
connection.setText("建立連接");
connection.addActionListener(new ChatClient_connection_actionAdapter(this));
port.setText("5000");
input.setText("MM");
send.setText("發(fā)送");
send.addActionListener(new ChatClient_send_actionAdapter(this));
ChatArea.setEditable(false);
ChatArea.setText("公共聊天區(qū)" + "\n");
address.setText("127.0.0.1");
contentPane.setBackground(Color.orange);
la.setText("在線用戶數(shù)");
la2.setText("0");
list.addActionListener(new ChatClient_list_actionAdapter(this));
la3.setBackground(Color.red);
la3.setText("群公告:歡迎進(jìn)入清風(fēng)聊天室,請大家文明聊天!");
contentPane.add(label1, new XYConstraints(27, 38, 59, 31));
contentPane.add(sender, new XYConstraints(96, 37, 131, 33));
contentPane.add(hostIP, new XYConstraints(26, 87, 67, 34));
contentPane.add(connection, new XYConstraints(243, 36, 198, 34));
contentPane.add(port, new XYConstraints(296, 87, 145, 32));
contentPane.add(Hostport, new XYConstraints(243, 86, 50, 34));
contentPane.add(jTable1, new XYConstraints( -12, 403, -1, -1));
contentPane.add(address, new XYConstraints(96, 85, 131, 34));
contentPane.add(la2, new XYConstraints(438, 137, 31, 29));
contentPane.add(la, new XYConstraints(359, 139, 63, 26));
scrollPane1.add(ChatArea);
contentPane.add(scrollPane1, new XYConstraints(29, 163, 318, 314));
contentPane.add(list, new XYConstraints(362, 163, 110, 313));
contentPane.add(send, new XYConstraints(364, 491, 106, 36));
contentPane.add(input, new XYConstraints(30, 492, 317, 33));
contentPane.add(la3, new XYConstraints(29, 126, 319, 27));
}
public void run() {
receive();
}
public void connection_actionPerformed(ActionEvent e) { //與服務(wù)端建立連接,將用戶信息發(fā)送至服務(wù)端
try {
sendUserInfo(sender.getText(), InetAddress.getLocalHost().getHostAddress(),
2);
list.add(sender.getText());
ChatArea.append(sender.getText() + "進(jìn)入了聊天室" + "\n");
int a = Integer.parseInt(la2.getText()) + 1;
la2.setText(String.valueOf(a));
}
catch (Exception ex) {
JOptionPane.showMessageDialog(
null, "連接失敗,請查看服務(wù)器信息!");
}
}
public void send_actionPerformed(ActionEvent e) { //向服務(wù)端發(fā)送聊天信息
try {
(new SendThread()).start();
send(sender.getText(), input.getText(), 1);
ChatArea.append(sender.getText() + " " +(new MyDate()).getDate()+"\n"+input.getText() + "\n"+"\n");
input.setText(null);
}
catch (Exception ex) {
JOptionPane.showMessageDialog(
null, "連接失敗,請查看服務(wù)器信息!");
}
}
/**
* 向服務(wù)端發(fā)送用戶信息數(shù)據(jù)包
* @param sender String
* @param IP String
* @param i int
*/
public void sendUserInfo(String sender, String IP, int i) {
try {
socket = new DatagramSocket(3000);
byte[] buf = new Helper().wrapUserInfo(sender, IP, i);
mail_packge = new DatagramPacket(buf, buf.length,
InetAddress.getByName(address.getText()),
Integer.parseInt(port.getText()));
socket.send(mail_packge);
}
catch (Exception ex) {
ex.printStackTrace();
}
finally {
if (socket != null) {
socket.close();
}
}
}
/**
* 向服務(wù)端發(fā)送轉(zhuǎn)發(fā)信息
* @param sender String
* @param input String
* @param i int
*/
public void send(String sender, String input, int i) {
DatagramSocket ds = null;
try {
ds = new DatagramSocket(4000);
byte[] buf = new Helper().wrap(sender, input, i);
DatagramPacket dp = new DatagramPacket(buf,
buf.length,
InetAddress.getByName(address.
getText()),
Integer.parseInt(port.getText()));
ds.send(dp);
}
catch (Exception ex) {
ex.printStackTrace();
}
finally {
if (ds != null) {
ds.close();
}
}
}
/**
* 在在線列表中添加用戶信息
* @param name String
*/
public void addlist(String name) {
StringTokenizer s = new StringTokenizer(name, ",");
while (s.hasMoreTokens()) {
list.add(s.nextToken());
}
}
/**
* 客戶端接受服務(wù)器發(fā)來的數(shù)據(jù)包
*/
public void receive() {
DatagramSocket ds = null;
DatagramPacket dp = null;
try {
ds = new DatagramSocket(6000);
byte[] buf = new byte[1024];
dp = new DatagramPacket(buf, 1024);
}
catch (Exception ex) {}
while (true) {
if (ds == null) {
break;
}
else {
try {
ds.receive(dp);
ChatMessage cm = new Helper().unwrap(dp.getData());
if (cm != null && Integer.parseInt(cm.getType()) == 1) { //這個包為消息包
String message = cm.getSender() + cm.getTime() + cm.getMessage();
ChatArea.append(cm.getSender() + " " + cm.getTime() + "\n" +
cm.getMessage());
}
else if (cm != null && Integer.parseInt(cm.getType()) == 2) { //這個包為用戶登入信息包
}
else if (cm != null && Integer.parseInt(cm.getType()) == 3) { //這個包為在線列表用戶信息包
addlist(cm.getOnlineTable()); //刷新在線列表信息
la2.setText(String.valueOf(list.getSize()));
}
}
catch (Exception ex) {}
}
}
}
public void list_actionPerformed(ActionEvent e) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
}
catch (Exception exception) {
exception.printStackTrace();
}
new personalWin(list.getSelectedItem());
}
});
}
class SendThread extends Thread{
public void run(){
}
}
}
class ChatClient_list_actionAdapter
implements ActionListener {
private ChatClient adaptee;
ChatClient_list_actionAdapter(ChatClient adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.list_actionPerformed(e);
}
}
class ChatClient_send_actionAdapter
implements ActionListener {
private ChatClient adaptee;
ChatClient_send_actionAdapter(ChatClient adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.send_actionPerformed(e);
}
}
class ChatClient_connection_actionAdapter
implements ActionListener {
private ChatClient adaptee;
ChatClient_connection_actionAdapter(ChatClient adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.connection_actionPerformed(e);
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -