您的位置:首页 > 编程语言 > Java开发

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

2012-07-22 16:48 323 查看
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();

}

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: