UDP网络程序-1

    技术2025-04-01  14

    1.       UDP程序进行发送和接受

    先运行接收程序:

    package UDP;

    import java.net.*;

    public class UdpRecv {

     

        /**

         * @param args

         */

        public static void main(String[] args) throws Exception{

           // TODO Auto-generated method stub

           DatagramSocket ds=new DatagramSocket(3000);

           byte [] buf=new byte[1024];

           DatagramPacket dp=new DatagramPacket(buf,1024);

           ds.receive(dp);

           String info=new String(dp.getData(),0,dp.getLength());

           System.out.println(info+"from"+dp.getAddress().getHostAddress()+""+dp.getPort());

           ds.close();

        }

     

    }

    再运行发送程序:

    package UDP;

    import java.net.*;

    public class UdpSend {

     

        /**

         * @param args

         */

        public static void main(String[] args) throws Exception {

           // TODO Auto-generated method stub

           DatagramSocket ds=new DatagramSocket();

           String strInfo="我来了";

           ds.send(new DatagramPacket(strInfo.getBytes(),strInfo.getBytes().length,InetAddress.getByName("127.0.0.1"),3000));

           ds.close();

        }

     

    }

    2.       UDP程序编写聊天软件

    1)  编写用户图形界面

    2)  编写网络信息发送功能

    3)  编写网络消息接收功能

    程序代码:

    package chat;

    import java.awt.*;

    import java.awt.event.*;

    import java.io.IOException;

    import java.net.*;

     

     

    public class Chat extends Frame {

        List lst=new List(6);//定义一个接收聊天信息的列表

        TextField tfIP=new TextField(15);//定义输入ip信息的文本框

        TextField tfData=new TextField(20);//定义发动聊天信息的文本框

        DatagramSocket ds=null;//定义一个socket

        public Chat()

        {

            try {

               ds=new DatagramSocket(3000);//实例化一个soket对象,端口号为3000

           } catch (SocketException e1) {

               e1.printStackTrace();

           }

           this.add(lst,"Center");//把聊天信息的列表添加在主窗口的中间

           Panel p=new Panel();//定义一个面板

           this.add(p,"South");//把面板添加到主窗口的下部

           p.setLayout(new BorderLayout());//定义该面板的布局格式

           p.add(tfIP,"West");//把输入ip信息的框定义在面板左侧

           p.add(tfData,"East");//把对话框定义在面板右侧

           new Thread(new Runnable()

           {

     

               public void run() {

                  byte []buf=new byte[1024];//定义一个字节数组

                  DatagramPacket dp=new DatagramPacket(buf,1024);//定义一个接收数据的数据包

                  while (true) {//循环读取数据

                      try {

                         ds.receive(dp);//通过soket向包中读取数据

                         String infoString=new String(dp.getData(),0,dp.getLength());//把接收到的数据转化为字符串

                         lst.add(infoString+" from"+dp.getAddress().getHostAddress()+":"+dp.getPort(),0);//显示接收到的数据,和该数据的传送ip和端口号

                      } catch (IOException e) {

                         if (!ds.isClosed()) {

                             e.printStackTrace();//如果不是因为soket关闭引起的异常则显示

                         }

                      }

                     

                  }

               }

              

           }).start();//开启该线程

           tfData.addActionListener(new ActionListener(){//编写文本输入框的监听器

     

               public void actionPerformed(ActionEvent arg0) {

                  byte []buf=tfData.getText().getBytes();//定义一个字节数组,用来接收文本输入框的数据

                  try {

                      DatagramPacket dp = new DatagramPacket(buf,buf.length,InetAddress.getByName(tfIP.getText()),3000);//把字节数组中的数据导入到数据包里,并声明数据发送的ip和端口号

                      ds.send(dp);//发送数据

                      tfData.setText("");//清空文本输入框

                  } catch (Exception e) {

                         e.printStackTrace();

                  }

               }

              

           });

           addWindowListener(new WindowAdapter(){//关闭按钮的响应事件

               public void windowClosing(WindowEvent e)

               {

                  ds.close();

                  dispose();

                  System.exit(0);

               }

              

           });

        }

        public static void main(String[] args) {

           // TODO Auto-generated method stub

           System.out.println("starting ...");

           Chat t=new Chat();

           t.setSize(300, 400);//设置窗口的大小

           t.setTitle("Chat");

           t.setVisible(true);

           t.setResizable(false);

        }

     

    }

     

    最新回复(0)