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();
}
}
}
}
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();
}
}
}
}
相关文章推荐
- java使用UDP来进行客户端和服务器端通信的简单例子
- 一个完整的通过encoding/json信息传递格式,采用http.POST利用进行与服务器通信,并对返回结果进行解析处理的典型案例
- 使用无连接的数据报(UDP)进行通信 分类: Java 2015-07-27 20:59 13人阅读 评论(0) 收藏
- C++服务器与java进行socket通信案例
- Java中通过方法创建一个http连接并请求(服务器间进行通信)
- java中使用socket进行udp方式通信时拔掉网线会导致send()方法阻塞
- [C语言]一个很实用的服务端和客户端进行UDP通信的实例
- Java 网络编程(六) 使用无连接的数据报(UDP)进行通信
- 一个简单的JAVA网络通信 UDP 单工方式
- Java UDP使用Socket进行网络通信(0)
- C++服务器与java进行socket通信案例
- 一个简单的Java UDP协议通信的例子
- C++服务器与java进行socket通信案例
- C++服务器与java进行socket通信案例
- 一个简单的Java UDP协议通信的例子
- Java使用udp传输方式进行网络通信
- java使用UDP协议进行服务器客户端通信
- Java 网络编程(六) 使用无连接的数据报(UDP)进行通信
- java使用UDP来进行客户端和服务器端通信的简单例子
- Java 网络编程(六) 使用无连接的数据报(UDP)进行通信