`
夏文权
  • 浏览: 237864 次
  • 性别: Icon_minigender_1
  • 来自: 贵州
社区版块
存档分类
最新评论

UDP编写的简单聊天程序

阅读更多
 import java.awt.*;
import java.awt.event.*;
import java.io.IOException;
import java.net.*;
/*
 * 用UDP编写的聊天程序
 */
public class UDPChat {
	Frame f = new Frame("我的聊天室");
	TextField tfIP = new TextField(15);
	/*
	tfd是用于输入IP地址的文本框,在发送数据时,要取出其中的IP地址,
	所以将其定义成为变量,以便发送消息的程序代码访问
	*/
	List lt = new List(6);
	/*
	lt是用于显示接受消息的列表框,在接受到数据时,
	要向其中增加新的记录项,所以将其定义为成员变量,
	以便接收消息程序代码访问
	*/
	DatagramSocket ds;
	/*
	 * 由于DatagramSocket的构造函数声明可能抛出异常,我们的程序需要用try...catch语句
	 * 进行异常捕获处理,所以不能直接在这里调用DatagramSocket的构造方法对ds进行初始化,
	 * 我们需要将ds的初始化放在Chat类的构造方法中去完成。
	 */
	public UDPChat(){
		try{
			ds = new DatagramSocket(3000);
		}catch(Exception e){
			e.printStackTrace();
		}
		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);
						lt.add(new String(buf,0,dp.getLength())+":from"+dp.getAddress().getHostAddress(),0);
					}catch(Exception e){
						e.printStackTrace();
					}
				}
			}
		}).start();
	}
	
	
	public static void main(String[] args){
		UDPChat chat = new UDPChat();
		chat.init();	
	}
	public void init(){
		f.setSize(300,300);
		f.add(lt);	
		
		Panel p = new Panel();
		p.setLayout(new BorderLayout());
		p.add("West",tfIP);
		TextField tfData = new TextField(20);
		p.add("East",tfData);
		f.add("South",p);
		
		f.setVisible(true);
		f.setResizable(false);//限制用户改变窗口的大小
		
		//增加关闭窗口的事件处理代码
		f.addWindowListener(new WindowAdapter(){
			@SuppressWarnings("unused")
			public void windowCloseing(WindowEvent e){
				ds.close();//程序退出时,关闭Socket,释放相关资源
				f.setVisible(false);	
				f.dispose();
				System.exit(0);
			}	
		});
		//增加在消息文本框中按下回车键的事件处理代码
		tfData.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
				//要在这里增加网络消息发送相关程序
				
				//取出文本框中的消息字符串,并将其转换成字节数组
				byte[] buf;
				buf = e.getActionCommand().getBytes();
				try {
					DatagramPacket dp = new DatagramPacket(buf,buf.length,InetAddress.getByName(tfIP.getText()),3000);
					try {
						ds.send(dp);
					} catch (IOException e1) {
						// TODO Auto-generated catch block
						e1.printStackTrace();
					}
				} catch (UnknownHostException e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				}
				
				//下面的语句用于数据发送后,清空文本框中原来的内容
				((TextField)e.getSource()).setText("");	
			}	
		});
	}
}

 

  • 大小: 3.7 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics