UDP通信——简单的不能再简单的聊天程序(老鸟跳过)

来源:互联网 发布:java d3.js 编辑:程序博客网 时间:2024/05/22 03:23

在网上看到 好多UDP的聊天程序,都没有注释所以…… 我只是在写这个程序的时候把我遇到的问题加上了注释。 

package hr.csdn.com;import java.awt.BorderLayout;import java.awt.Color;import java.awt.FlowLayout;import java.awt.GridLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.io.IOException;import java.net.DatagramPacket;import java.net.DatagramSocket;import java.net.InetAddress;import java.net.SocketException;import java.net.UnknownHostException;import java.util.jar.JarFile;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JList;import javax.swing.JPanel;import javax.swing.JTextArea;import javax.swing.JTextField;public class ChartTest extends JFrame implements ActionListener {/** * @param args *  */ JPanel panel1,panel2; JTextField text1,text2,text3; JTextArea ta; JButton btn; JList l;public ChartTest(){super();this.setBounds(200,200,400,400);//设置窗体的坐标和大小panel1=new JPanel();ta=new JTextArea(15,15);text1=new JTextField(15);text3=new JTextField(15);text2=new JTextField(15);btn=new JButton("发送");btn.addActionListener(this);//给BUTTON设置监听器panel1.setLayout(new BorderLayout());panel1.add(text3,"North");panel1.add(ta,"Center");panel2=new JPanel();panel2.setLayout(new GridLayout(1,2));panel2.add(text1);panel2.add(text2);panel2.add(btn);this.setLayout(new BorderLayout());this.add(panel1,"North");this.add(panel2,"South");this.setVisible(true);}public static void main(String[] args) {// TODO Auto-generated method stub//ChartTest ch=new ChartTest();try {DatagramSocket rece=new DatagramSocket();//因为是UDP通信,所以开启程序的时候必须先启动 接收端,开启这个线程ChatRe c=new ChatRe(rece);new Thread(c).start();} catch (SocketException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}}@Overridepublic void actionPerformed(ActionEvent e) {//这是BUTTON按钮的监听器,当你点击这个按钮的时候,发送消息// TODO Auto-generated method stubDatagramSocket ds;//创建一个DatagramSocket对象try {ds = new DatagramSocket();String str=this.text2.getText();try {DatagramPacket dp=new DatagramPacket(str.getBytes(),str.getBytes().length,InetAddress.getByName("127.0.0.1"),50000);ds.send(dp);ds.close();} catch (Exception e1) {// TODO Auto-generated catch blocke1.printStackTrace();}} catch (SocketException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}}}class ChatRe implements Runnable{//单独开启一个线程 用来接收 信息ChartTest ch=new ChartTest();//这里创建一个ChartTest对象 用来调用下文中的ta 也就是把接收到的信息放到ta中public  DatagramSocket ds; public ChatRe(DatagramSocket ds){ this.ds=ds; }@Overridepublic void run() {// TODO Auto-generated method stubtry {ds=new DatagramSocket(50000);} catch (SocketException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}byte[] buf=new byte[1024];DatagramPacket dp=new DatagramPacket(buf, buf.length);try {while(true){ds.receive(dp);String str=new String(dp.getData(),0,dp.getLength());ch.ta.setText(str);}} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}ds.close();}}


原创粉丝点击