java学习之利用UDP编写网络聊天程序

来源:互联网 发布:易观智库 数据来源 编辑:程序博客网 时间:2024/05/17 07:38


代码如下:
udpT.java
package udpT;import java.awt.*;import java.awt.event.*;import java.io.IOException;import java.net.*;import javax.swing.*;public class udpT extends JFrame {List lst=new List(6);JTextField ipJtf=new JTextField(15);JTextField msgJtf=new JTextField(20);JPanel jp=new JPanel();public udpT(){Container c=this.getContentPane();c.add(jp,BorderLayout.SOUTH);c.add(lst,BorderLayout.CENTER);jp.add(ipJtf,BorderLayout.WEST);jp.add(msgJtf,BorderLayout.EAST);new Thread(new recMsg(6000)).start();//内容文本框监听事件msgJtf.addActionListener(new ActionListener(){@Overridepublic void actionPerformed(ActionEvent e) {// TODO Auto-generated method stubsendMsg(msgJtf.getText(),6000);msgJtf.setText("");}});}//发送函数。定义输入字符串和端口public void sendMsg(String str,int port){DatagramSocket ds = null;byte[] buff=null;buff=str.getBytes();try {ds = new DatagramSocket();DatagramPacket dp=new DatagramPacket(buff,buff.length,InetAddress.getByName(ipJtf.getText()),port);ds.send(dp);//ds.close();} catch (Exception e1) {// TODO Auto-generated catch blocke1.printStackTrace();}}//定义内部接收类 class recMsg implements Runnable{ DatagramSocket ds=null; DatagramPacket dp=null; String str=null; int portS=0; byte[] buff=new byte[1024];     //构造函数,接收端口号 public recMsg(int port) { this.portS=port; } //重写run方法,实现多线程运行接收程序    public void run() {        try {            ds = new DatagramSocket(portS);        } catch (SocketException e1) {            e1.printStackTrace();        }        byte[] buf=new byte[1024];        while(true){            try{                DatagramPacket dp=new DatagramPacket(buf,buf.length);                ds.receive(dp);                //String data = new String(buf,0,dp.getLength());                //String ip = dp.getAddress().getHostAddress();                //int port = dp.getPort();               // str = ip+" : "+port+"\r\n"+data+"\r\n\r\n";                str="接收信息来自: "+dp.getAddress().getHostAddress()+":"+dp.getPort()     +"  信息内容为: "+new String(dp.getData(),0,dp.getLength());                lst.add(str);            }catch(Exception e){                    e.printStackTrace();            }        }    }}public static void main(String[] args) {// TODO Auto-generated method stubudpT mf=new udpT();mf.setTitle("UDP网络聊天程序");mf.setSize(500, 400);mf.setVisible(true);mf.setResizable(false);}}



0 0
原创粉丝点击