UDP网络程序-1

来源:互联网 发布:超轻粘土淘宝 编辑:程序博客网 时间:2024/05/15 23:17

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);

    }

 

}

 

原创粉丝点击