简单聊天程序
本程序实现任意两个已知IP的两电脑之间的聊天通讯。
Chat.java代码如下:
package com.chat.app;import java.awt.BorderLayout;import java.awt.Frame;import java.awt.List;import java.awt.Panel;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.IOException;import java.net.DatagramPacket;import java.net.DatagramSocket;import java.net.InetAddress;import java.net.SocketException;import java.net.UnknownHostException;public class Chat extends Frame{/** * */private static final long serialVersionUID = 1L;List list = new List(6);//定义列表框,最多显示6行TextField tfIP = new TextField(15);TextField tfData = new TextField(20);DatagramSocket ds = null;public Chat(){try {ds = new DatagramSocket(3000);//设置自己接收数据的端口号为3000} catch (SocketException e1) {e1.printStackTrace();}this.add(list,"Center");Panel p = new Panel();this.add(p,"South");p.setLayout(new BorderLayout());p.add(tfIP,"West");p.add(tfData,"East");/** * 接收数据处理代码 */new Thread(new Runnable(){public void run(){byte[] buf = new byte[1024];DatagramPacket dp = new DatagramPacket(buf,buf.length);while(true){try {ds.receive(dp);} catch (IOException e) {if(!ds.isClosed()){//只有当程序没有被关闭时,发生异常才会抛出异常e.printStackTrace();}}list.add(new String(buf,0,dp.getLength())+" from "+dp.getAddress().getHostAddress()+":"+dp.getPort(),0);}}}).start();/** * 网络消息发送处理代码 */tfData.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {//取出消息文本框中的数据和ip文本框中的IP地址byte[] buf = tfData.getText().getBytes();try {DatagramPacket dp = new DatagramPacket(buf, buf.length,InetAddress.getByName(tfIP.getText()),3000);//这里设置接收消息的端口号为3000ds.send(dp);//如果将ds.send(dp);语句放到try语句块外面,则访问不到dp了,因为dp的有效范围为try语句块内} catch (UnknownHostException e1) {e1.printStackTrace();} catch (IOException e1) {e1.printStackTrace();}tfData.setText("");}});addWindowListener(new WindowAdapter() {public void windowClosing(WindowEvent e){ds.close();dispose();System.exit(0);}});}public static void main(String[] args) {System.out.println("Starting chat...");Chat mainFrame = new Chat();mainFrame.setSize(300, 400);mainFrame.setTitle("Chat");mainFrame.setVisible(true);mainFrame.setResizable(false);}}