udp 通信java例_java的UDP进行通信的一个小案例

import java.awt.BorderLayout;

import java.awt.Container;

import java.awt.Dimension;

import java.awt.Frame;

import java.awt.HeadlessException;

import java.awt.List;

import java.awt.Panel;

import java.awt.TextField;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.awt.event.WindowAdapter;

import java.awt.event.WindowEvent;

import java.awt.event.WindowListener;

import java.io.IOException;

import java.net.DatagramPacket;

import java.net.DatagramSocket;

import java.net.InetAddress;

import java.net.SocketException;

public class UDPCommunicationTest extends Frame implements Runnable{

private List list = new List(6);

private TextField ipTextField = new TextField(15);

private TextField contenTextField = new TextField(18);

private static UDPCommunicationTest communicationTest = null;

private static DatagramSocket datagramSocket = null;

public static void main(String[] args) {

communicationTest = new UDPCommunicationTest();

communicationTest.buildWindow();

communicationTest.contentClickEvent();

//当我们点击关闭窗口按钮的时候,释放资源,退出改程序,并且把socket关闭

communicationTest.addWindowListener(new WindowAdapter(){

public void windowClosing(WindowEvent e) {

// TODO Auto-generated method stub

super.windowClosing(e);

datagramSocket.close();

communicationTest.setVisible(false);

communicationTest.dispose();

System.exit(0);

}

});

}

public UDPCommunicationTest()

throws HeadlessException {

try {

//这个参数表示接受数据的端口号

datagramSocket = new DatagramSocket(3000);

new Thread(this).start();

} catch (SocketException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

//这是创建一个通信的窗口

public void buildWindow()

{

this.add(list, BorderLayout.CENTER);

Panel panel = new Panel();

panel.setLayout(new BorderLayout());

ipTextField.setText("192.168.1.101");

panel.add(ipTextField, BorderLayout.WEST);

contenTextField.setText("请输入发送信息:");

panel.add(contenTextField, BorderLayout.EAST);

this.add(panel, BorderLayout.SOUTH);

this.setBounds(400, 200, 300, 400);

this.setVisible(true);

this.setResizable(false);

}

//这是当我们点击回车按钮的时候就发送信息出去

public void contentClickEvent()

{

contenTextField.addActionListener(new ActionListener(){

public void actionPerformed(ActionEvent e) {          try {            String ip = ipTextField.getText();      String content = contenTextField.getText();      DatagramPacket p = new DatagramPacket(content.getBytes(), content.getBytes().length, InetAddress.getByName(ip), 3000);      datagramSocket.send(p);      contenTextField.setText("");     } catch (Exception e1) {      e1.printStackTrace();     }         }           });  }  //这是开启另外一个线程对数据进行接受,并且将数据添加到list里面  public void run() {   byte [] buf = new byte[1024];   DatagramPacket datagramPacket = new DatagramPacket(buf, 1024);   try {        while(true)    {     datagramSocket.receive(datagramPacket);     int len = datagramPacket.getLength();     String ip = datagramPacket.getAddress().getHostAddress();     int port = datagramPacket.getPort();     //第二个参数是将数据加在list的第一行     list.add(new String(buf, 0, len) + " from " + ip + " : " + port, 0);    }   } catch (Exception e) {    if(datagramSocket.isClosed())    {         }else    {     e.printStackTrace();    }      }    }     }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值